0

バックグラウンド

私は4つのデータセットを持っています。1つは時間圧力のある気象データで、もう1つは同じものの圧力センサーデータセットです。時間圧力。基本的に、どちらも時系列です。長い時系列は、両方の変数に対して約64008のデータポイントを持つ気象データです。圧力センサーの短い時系列は51759です。短い時系列は、いくつかのデータポイントが欠落している長い時系列のサブセットであると言えます。とにかく、私は天気にプレッシャーをかけたいのですが、それは私のセンサーが持っている時間だけです。

動機

つまり、基本的には、 whileループを実装して、圧力センサーの同等の時間ごとに、データかどうかにかかわらず、気象データから圧力を取得するようにしています。圧力センサーの時系列を使用できるので、気象データから時刻を記録する必要はありません。

私が何について話しているのかを理解するために、サンプルスクリプトを実行しましたが、問題なく実行されます。

x(:,1) = (1:50)';
x(:,2) = (51:100)';
y(:,1) = [1:12 20:25 40:45]';

i = 1;
j = 1;
while i < numel(y)+1
     if y(i) == x(j,1)
        a(i,1) = x(j,2);
        i = i + 1;
        j = j + 1;
     else 
        j = j + 1;    
    end
end

a
% check
size(y)
size(a)

ご覧のとおり、2列の長い系列でxのベクトルを作成しました。次に、xベクトルに含まれるデータポイントを含むベクトルyの値のサブセットを作成しました。スクリプトを実行します。一致するサイズyは、サイズが同じになることを意味します。また、行列自体も同じ値であることがわかりました。だからそれは動作します。これが私が何かを逃している単純化されたバージョンでない限り。いずれにせよ、私の実際のスクリプトは以下のとおりです。

% Pressure Data
west_time;
west_pressure;
% Weather Data
weather_data(:,1) = weather_time;
weather_data(:,2) = weather_pressure;
% Initialize vector
weather_pressure_sensor = zeros(numel(west_time));

% Obtaining the pressure from the weather data at a 
% particular point in time when it corresponds 
% with the time from my pressure sensor
i = 1;
j = 1;
while i < numel(west_time),
   if west_time(i) == weather_data(j,1)
       weather_pressure_sensor(i,:) = weather_data(j,2);
       i = i + 1;
       j = j + 1;
   else 
       i = i;
       j = j + 1;
   end  
end

% Weather Pressure
weather_pressure_final = weather_pressure_sensor(:,2);

ただし、データセットにアクセスすると、エラーコードが発生します。

Attempted to access weather_data(64009,1); index out of
bounds because size(weather_data)=[64008,2].

Error in data_timeset2 (line 69)
    if west_time(i) == weather_data(j,1)

私は自分のコードについて何か助けが得られるかどうか疑問に思っていました。私は何かが欠けていますか、それとも何かを定義しませんでしたか?これは私が常にwhileループを行ってきた方法であるため、なぜ今私を失敗させることにしたのかわかりません。しかし、いずれにせよ、それは本当に些細で愚かなことだと確信していますが、私は自分の人生を理解することができません。または多分誰かが別の方法を持っています...?いずれにせよ、事前に感謝します!

4

1 に答える 1

0

データセット内の時点が一意である場合、これを行うためのはるかに優れた方法があります。

t1 = [...]; #% time series 1
t2 = [...]; #% time series 2; is a subset of t1
p1 = [...]; #% pressure series 1; same length as t1
p2 = [...]; #% pressure series 2; same length as t2

[t1, index] = sort(t1); #% make monotonic if it isn't already
p1 = p1(index); #% apply same sorting to pressures
[t2, index] = sort(t2); #% same for t2, p2
p2 = p2(index);

[Lia, Locb] = ismember(t2, t1); #% Lia contains indices of t2 that are in t1
                                #% Locb contains indices of t1 that are in t2
final_p = p1(Locb); #% get the values of p1 where t2 existed in t1
于 2013-01-20T00:02:20.883 に答える