加权平均值定义为sum(x .* weights) / sum(weights)
。如果你想以移动平均的方式计算这个,我想你可以这样做(未经测试):
moving_sum = @(n, x) filter(ones(1,n), 1, x);
moving_weighted_avg = moving_sum(12, temperature .* days_per_month) ...
./ moving_sum(12, days_per_month);
如果temperature
是每月温度的向量并days_per_month
包含相应月份的实际天数,这甚至应该在闰年的情况下工作。
编辑以回答评论
您可以像这样重建days_per_month
:
start_year = 2003;
start_month = 10;
nmonth = 130;
month_offset = 0:nmonth - 1;
month = mod(start_month + month_offset - 1, 12) + 1;
year = start_year + floor((start_month + month_offset - 1) / 12);
days_in_month = eomday(year, month);
disp([month_offset; year; month; days_in_month]') %print table to check