0

背景

我有 4 个数据集:一个是带有时间压力的天气数据,另一个是具有相同的压力传感器数据集;时间压力。本质上,两者都是时间序列。较长的时间序列是天气数据,这两个变量都有大约 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 向量。然后我制作了向量 y 值的子集,其中包括 x 向量中包含的数据点。我运行我的脚本,a 的大小与 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 回答