2013-11-28 2 views
0

добрый утро. У меня есть матрица (eout) с 14610 строками и 16 столбцами. 14610 строка представляет собой один из каждого дня периода между 01-01-1960 и 31-12-2000.високосный год средний в matlab

Мне нужна новая матрица с 40 строками и 16 колонками со средним значением для каждого года. что-то вроде 365 строк. Проблема у меня есть високосный год каждые 4 года.

Предложения по решению этой проблемы?

+0

Это не должно быть трудно с датой matlabs функций, чтобы собрать их соответствующим образом. – bdecaf

+1

Вы должны сделать это красиво и аккуратно, используя 'accumarray'. Можете ли вы разместить небольшой подмножество своих данных, чтобы я мог видеть, как вы его храните? – Dan

+0

Я уже решил свою проблему, поэтому нет необходимости публиковать мой набор данных. Спасибо за вашу заботу! Это было действительно полезно! – rochinha44

ответ

1

Для начала, чтобы получить количество дней, в течение данного года:

function n = ndays(year) 
    tmp = repmat([1,1,0,0,0],numel(year),1); 
    n = datenum([year(:)+1,tmp])-datenum([year(:), tmp]); 
end 

С этим, вы можете собрать строки, например с mat2cell:

rows_per_year = ndays(1960:2000); 
chunks = mat2cell(yourInputMatrix, rows_per_year, size(yourInputMatrix,2)); 
means = cellfun(@(x) mean(x,1), chunks); 

(Последняя часть приходит непроверенных ..)