我观察到每日数据需要与生成的每月数据进行比较,因此我需要得到三十年内每个月的平均值。
我观察到的数据集当前是365x31,每天都有行(没有闰年!),额外的列是月份数(1-12)。
我遇到的问题是,我似乎只能得到一个脚本来获得所有年份的平均值。即。我无法想象如何让脚本分别为每个列执行此操作。数据示例如下:1 12 14
1 -15 10
2 13 3
2 2 37
...all the way to 12 for 365 rows
SO:回顾一下,我需要得到[12; -15; 13; 2]然后[14; 10; 3; 37]等等。
我一直在尝试使用unique()函数进行循环,以便将数字行设置为平均但不正确的方法。现在我需要它每个月(28-31行)和单独列。结果应为12x30矩阵。我觉得我错过了一些简单的东西。代码:
u = unique(m); %get unique values of m (months) ie) 1-12
for i=1:length(u)
month(i) = mean(obatm(u(i), (2:31)); % the average for each month of each year
end
欣赏任何想法!谢谢!
答案 0 :(得分:2)
您可以简单地过滤每个月的行,然后应用mean
,如下所示:
month = zeros(12, size(obatm, 2));
for k = 1:12
month(k, :) = mean(obatm(obatm(:, 1) == k, :));
end
修改强>
如果你想要一些花哨的东西,你也可以这样做:
cols = size(obatm, 2) - 1;
subs = bsxfun(@plus, obatm(:, 1), (0:12:12 * (cols - 1)));
vals = obatm(:, 2:end);
month = reshape(accumarray(subs(:), vals(:), [12 * cols, 1], @mean), 12, cols)
看,马,没有循环!