我试图从netcdf文件中获取变量的5年数据并创建年度周期。所以拿掉所有5个Jans并取平均值,取5个Febs并取平均值等,并绘制线图。我刚刚启动代码(我希望在继续之前让它工作)并且收到以下错误消息:在赋值A(:) = B中,A和B中的元素数量必须是一样的。
我的问题是,有更好的方法吗?
提前感谢您的帮助。我是新手,所以我知道这可能是一个简单的问题。
ncid = netcdf.open('example.nc','NC_NOWRITE');
PS1 = netcdf.getVar(ncid,netcdf.inqVarID(ncid, 'ps'), 'single');
for i = 1:12
MonthlyPS1(i) = PS1(month==i);
end
应该将数据转储到每个月的分档中,我可以稍后计算平均值。
答案 0 :(得分:2)
如果PS1
是一个5乘12的实数数组,那么:
MonthlyPS1 = mean(PS1);
如果PS1
是一个12乘5的实数数组,那么:
MonthlyPS1 = mean(PS1, 2);
如果PS1是一个60乘1的实数数组,那么:
MonthlyPS1 = mean(reshape(PS1, 12, 5), 2);
如果PS1
不是实数数组,则需要按照CST-Link的要求解释PS1
是什么。此外,还不清楚变量month
是什么。
答案 1 :(得分:0)
我会尝试编写一个解决方案,但我不确定这是否是您需要的(我的答案中有一定数量的猜测)。
此外,我不会在Matlab惯用代码中编写它,而是显式循环和计算;像这样,如果你想要与否,你可能会更容易看到:
% allocate space for monthly mean values
PS1_mean = zeros(size(PS1,1), size(PS1,2), 12)
for d = 1:size(PS1,3)
% calculate the month for date d
m = mod(d, 12);
if m == 0
m = 12;
end;
% cumulate the data
PS1_mean(:, :, m) = PS1_mean(:, :, m) + PS1(:, :, d);
end;
% calculate the mean value
% (this might be tricky for incomplete years)
n_years = fix(size(PS1,3) / 12);
PS1_mean = PS1_mean / n_years;
绘制"切片"例如,数据的三月,你可以试试:
mesh(PS1_mean(:,:,3));
同样,我希望你能找到的是什么。