2013-03-20 5 views
1

У меня есть datset, который начинается примерно следующим образом:MATLAB работает с длинными временными рядами

year month daynum hour  depth  wtemp 
1989 5 136  0   0.01  14.32 
1989 5 136  0   0.5  14.32 
1989 5 136  0   1  13.52 
1989 5 136  0   2  12.31 
1989 5 136  0   3  10.16 
1989 5 136  0   4  8.61 
1989 5 136  0   6  6.86 
1989 5 136  0   8  6.03 
1989 5 136  0   10  5.45 
1989 5 136  1   0.01  13.38 
1989 5 136  1   0.5  13.41 
1989 5 136  1   1  13.12 
1989 5 136  1   2  10.88 
1989 5 136  1   3  10.09 
1989 5 136  1   4  9.09 
1989 5 136  1   6  7.24 
1989 5 136  1   8  6.45 
1989 5 136  1   10  5.67 
1989 5 136  2   0.01  13.2 
1989 5 136  2   0.5  13.24 
1989 5 136  2   1  13.24 
1989 5 136  2   2  11.07 
1989 5 136  2   3  10.14 
1989 5 136  2   4  9.02 
1989 5 136  2   6  7.23 
1989 5 136  2   8  6.23 
1989 5 136  2   10  5.59 
1989 5 136  3   0.01  13.11 
1989 5 136  3   0.5  13.15 
1989 5 136  3   1  13.11 
1989 5 136  3   2  11.26 
1989 5 136  3   3  10.25 
1989 5 136  3   4   9.2 
1989 5 136  3   6   6.99 
1989 5 136  3   8   5.96 
1989 5 136  3   10  5.5 

Этот набор данных содержит более 1000000 строк данных. когда я импортирую данные в matlab, я остаюсь с этой структурой (хотя без заголовков). Я хотел бы знать, как я мог бы вернуть индексы для минимальной и максимальной глубины (т. Е. Столбца 5) для каждого отдельного периода времени?

Ответ в этом случае было бы что-то вроде:

1,9 
10,18, 

and so on.

Имейте в виду, что число измерений и, следовательно, количество глубины будет меняться на протяжении всего периода исследования, поэтому я придется использовать информацию в год, месяц, день, час и глубину.

Основная цель здесь - построить матрицу, содержащую только температуру, зарегистрированную на минимальной и максимальной глубине для каждого часа.

До сих пор я пытался (данные название матрицы):

[~,~,b] = unique(data(:,1:4),'rows'); 
MaxMin_temp = [abs(accumarray(b,data(:,end),[],@min)), abs(accumarray(b,data(:,end),[],@max))]; 

, которая возвращает температуру на минимальной и максимальной глубины для каждого отдельного дня. Из этого я надеялся на более сложный способ получения всех столбцов для этих значений.

+2

Что вы пробовали? Вы недавно задали множество вопросов о Matlab, вы постепенно получаете SO, чтобы научить вас, что вы узнали, что вы можете внести в сообщество? –

+0

Я задал 3 вопроса через 2 недели. Это неприемлемо? Я вообще не предлагаю свои попытки в этом вопросе, я думал, что вопрос с длинными волосами отпугнул бы людей от ответа на него, но если мне нужно показать свои попытки, это достаточно справедливо. – KatyB

+1

Да, скорость, с которой вы задаете вопросы, вполне приемлема. Но, спрятав ваши собственные усилия, чтобы ответить на ваши вопросы, вы предлагаете яркие комментарии, такие как мои (выше), которые обвиняют вас в том, что вы недостаточно стараетесь, прежде чем спрашивать о том, чтобы помочь. Так любит трюк, единственный способ показать нам, что вы один такой и поэтому любите, - это показать нам, что вы пробовали. Проведите некоторое время, оглядываясь вокруг, особенно на вопросы, которые получают хорошие ответы. –

ответ

1

использовать datenum для присвоения каждому периоду времени целочисленного индекса.
Затем вы можете использовать accumarray дважды: один раз с @min и один раз с @max как функцию «накапливания» для вычисления минимального значения (макс.) От значений бинов глубины или температуры.

Смежные вопросы