Как изменить этот код для расчета сезонных значений для каждого года (не всех лет) - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть ячейка 1x3, содержащая три таблицы 360x3. Для каждой таблицы я хотел вычислить среднее значение rrr24 для каждого сезона и записать их в 5-й столбец. Например: посмотрите на это изображение

У меня есть код, как вы можете видеть ниже, но он рассчитывает среднее значение каждого сезона за все 30 лет (не ежегодно), и не сделал Напишите средние значения в 5-м столбце тоже. В результате я хотел бы просто новую 1x3 ячейку с таблицами с 5-м столбцом, как я описал выше.

    meanTableDataArray = cell(length(CELL),4);
for j = 1:length(CELL)
    sampleTableData = CELL{j};
    sampleTableData.month = month(sampleTableData.dates);
    sampleTableData.seasons = floor(sampleTableData.month ./3);
    sampleTableData.seasons(sampleTableData.seasons ==4 ) = 0;
    sampleTableData.seasons = categorical(sampleTableData.seasons, [0 1 2 3], ["Spr", "Sum", "Aut", "Win"]);
    [group, mean_table] = findgroups(sampleTableData(:, 'seasons'));
    mean_table.rrr24 = splitapply(@mean, sampleTableData.rrr24, group);
    for k = 1:4
        meanTableDataArray{j,k} = mean_table(k,:); % extracts as a table
    end
end

Вот моя ячейка

1 Ответ

0 голосов
/ 04 апреля 2020

вам нужно сгруппировать данные с использованием индекса сезона, а затем использовать accumarray, чтобы получить сумму, а затем взять среднее значение.

data=[0.2, 0.9, 10, 12, 8, 0.9, 10];
mon= [1,1,2,4,6,7,10];
seasons=floor((mon-eps)/3)+1;

accumarray(seasons,data)                       % this gives you the total
accumarray(seasons(:),ones(size(seasons(:))))  % this gives you the count
                                               % below gives you average
accumarray(seasons(:),data(:))./accumarray(seasons(:),ones(size(seasons(:))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...