试图计算年度周期

时间:2014-06-05 20:34:52

标签: matlab netcdf

我试图从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

应该将数据转储到每个月的分档中,我可以稍后计算平均值。

2 个答案:

答案 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));

同样,我希望你能找到的是什么。