1

synchronize() 関数は、時系列の引数を 2 つしか取りません。2 つ以上の時系列を同期する必要がある場合の標準的な手順は何ですか? (時系列 1 と 2 の同期の出力の 1 つ) を時系列 3 と同期しようとしましたが、結果は同期されません (たとえば、同じ長さ) (以下に示すように)。これは単に時間データの範囲に関係しているためです。 :

% Create data set 1
t1 = rand(10,1);
data1=rand(10,1);
ts1=timeseries(data1,t1);

% Create data set 2
t2 = rand(8,1);
data2=rand(length(t2), 1);
ts2=timeseries(data2,t2);

% Create data set 3
t3 = rand(5,1);
data3=rand(length(t3), 1);
ts3=timeseries(data3,t3);

% Sync 1 and 2
[uniform_ts12_1 uniform_ts12_2] = synchronize(ts1,ts2,'Uniform','Interval',.1);

% Sync 3 to one of the results of the (sync of 1 and 2)
[uniform_ts13_1 uniform_ts13_3] = synchronize(uniform_ts12_1,ts3,'Uniform','Interval',.1);

disp('New sizes:')
length(uniform_ts12_1.Data)
length(uniform_ts12_2.Data)
length(uniform_ts13_1.Data)
length(uniform_ts13_3.Data)

3 つの時系列を同期して、1 日の終わりにすべての時刻データが同じになるようにする方法を誰かが提案できますか?

編集:

問題は、uniform_ts12_1、uniform_ts12_2、uniform_ts13_1、および length(uniform_ts13 の長さが同じではないことです。2 を 1 と同期しますが、3 が 2 の境界の外側 (またはかなり内側) にある場合、それらを小さい方に同期します。 1 と 2 の間の同期と同じ長さではなくなりました。

4

1 に答える 1

4

毎回同期された時系列を使用して、可能なすべてのペアを一緒に同期する必要があります。先に進んで時系列を変更すると単純化されると思います。その場で同期しているので、どの値を渡すかを追跡する必要はありません.3つの時系列を保持するだけで、それぞれが変更されるので、並べ替えるだけで済みます.時系列のすべてのペアが一緒に同期されるようにします。

>> [ts1 ts2] = synchronize(ts1, ts2, 'Union');
>> [ts1 ts3] = synchronize(ts1, ts3, 'Union');
>> [ts2 ts3] = synchronize(ts2, ts3, 'Union');
>> all(ts1.Time == ts2.Time)

ans =

     1

>> all(ts1.Time == ts3.Time)

ans =

 1

>> 

それが役立つことを願っています!

于 2014-05-17T03:14:38.743 に答える