while循環條件我有4個數據集:一個是與時間和壓力天氣數據,另一個是壓力傳感器數據集與之相同; 時間和壓力。實質上,兩者都是時間序列。較長的時間序列是兩個變量具有約64008個數據點的天氣數據。壓力傳感器的較短時間序列是51759.您可以說較短的時間序列是較長時間序列的一個子集,有一些缺失的數據點。無論如何,我希望得到天氣的壓力,但僅限於我的傳感器所具有的時間。
動機
所以基本上,我想實現一個while循環因此,對於每一個等效時間pf的我的壓力傳感器,以及是否數據,我會從氣象數據的壓力。我不需要從天氣數據記錄時間,因爲我可以使用我的壓力傳感器的時間序列。
例
爲了一個得到什麼我談論的想法,我做了一個示例腳本,它運行得很好。
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)
正如你所看到的,我做了一個x的向量,其中有一個長的系列在2列。然後我創建了向量y的一個子集,其中包含x向量中包含的數據點。我運行我的腳本,匹配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)
我在想,如果我能得到我的代碼一些幫助。我錯過了什麼,或者我沒有定義什麼?這是我一直在循環中完成的方式,所以我不知道爲什麼它現在決定讓我失敗。但無論如何,我肯定這是一件非常微不足道的事情,但我無法弄清楚我的生活。或者,也許有人有另一種方式...?無論哪種方式,都非常感謝!
我喜歡你的方法。它很有意義,而且管理起來要容易得多。 但是,經過調查,我發現我的一些數字在我的t1_members向量(Locb)中得到了一些零值。我知道零表示A不在B中。但是,如果A是B的子集,那麼不應該有任何零,是正確的? –
玩一個小樣本數據集以適應它。如果'A'是'B'的一個子集,那麼'[Lia,Locb] = ismember(A,B)'將具有'Lia'全部爲'1',因爲所有'A'都在'B'中,和'Locb'將是一個與'A'和'find(Lia)'長度相同的索引向量。嘗試切換參數的順序(用小例子),看看會發生什麼。 – tmpearce