Найдите блоки с одинаковыми датами в векторе и усредните соответствующий блок данных в другом векторе.

Я новичок в Matlab и ищу решение проблемы определения блоков одинаковых дат в одном векторе и усреднения по соответствующему блоку данных в другом векторе.

Дан вектор, состоящий из нескольких блоков дат в формате «дд-ммм-гггг». Блоки с одинаковыми датами могут иметь переменную длину. Примером может быть

T=  ['03-Jan-2013'; 
    '03-Jan-2013'; 
    '03-Jan-2013';
    '04-Jan-2013';
    '04-Jan-2013';
    '05-Jan-2013']  

Каждая дата в T соответствует записи данных в другом векторе H (для простоты одни и те же даты из T имеют здесь одинаковые соответствующие номера в )

H= [1;
    1;
    1;
    5;
    5;
    6]

Теперь цель состоит в том, чтобы определить среднее значение элементов H, которые соответствуют одним и тем же датам и возвращают измененную дату и вектор данных Tout и Hout что будет выглядеть так:

Tout=['03-Jan-2013'; 
     '04-Jan-2013';          
     '05-Jan-2013']  

и

Hout=[1;
     5;
     6]

где Hout представляет усредненные значения.

Оба вектора изначально берутся из текстового файла и могут иметь длину около 100k. Так что зацикливание, вероятно, не лучшее, что можно сделать.

Я ценю любую помощь!


person Lukas    schedule 13.09.2013    source источник


Ответы (1)


Используйте unique, чтобы получить уникальные даты и их кратность, и accumarray, чтобы усреднить повторяющиеся даты.

[Tout,~,n] = unique(T, 'rows');
Hout = accumarray(n, H, [], @mean);
person Mohsen Nosratinia    schedule 13.09.2013