Фон
У меня есть 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)
Как видите, я сделал вектор 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)
Мне было интересно, могу ли я получить некоторую помощь с моим кодом. Я что-то упустил или что-то не определил? Так я всегда делал циклы while, поэтому я не знаю, почему он решает подвести меня сейчас. Но в любом случае, я уверен, что это что-то действительно тривиальное и глупое, но я не могу понять, что это за жизнь. А может у кого есть другой способ...? В любом случае заранее очень признателен!