Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 试图计算年周期_Matlab_Netcdf - Fatal编程技术网

Matlab 试图计算年周期

Matlab 试图计算年周期,matlab,netcdf,Matlab,Netcdf,我试图从netcdf文件中提取5年的数据作为变量,并创建一个年度周期。所以把所有的5个Jan取平均值,把所有的5个Feb取平均值,以此类推,然后画一个折线图。在继续之前,我刚刚开始编写代码,希望它能够正常工作,并得到以下错误消息:在赋值A:=B中,A和B中的元素数必须相同 我的问题是,有没有更好的办法 提前谢谢你的帮助。我是个新手,所以我知道这可能是个简单的问题 ncid = netcdf.open('example.nc','NC_NOWRITE'); PS1 = netcdf.getVar(

我试图从netcdf文件中提取5年的数据作为变量,并创建一个年度周期。所以把所有的5个Jan取平均值,把所有的5个Feb取平均值,以此类推,然后画一个折线图。在继续之前,我刚刚开始编写代码,希望它能够正常工作,并得到以下错误消息:在赋值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
这会将每个月的数据转储到垃圾箱中,我可以在那里计算平均值

如果PS1是一个5乘12的实数数组,那么:

MonthlyPS1 = mean(PS1);
MonthlyPS1 = mean(PS1, 2);
MonthlyPS1 = mean(reshape(PS1, 12, 5), 2);
如果PS1是12乘5的实数数组,则:

MonthlyPS1 = mean(PS1);
MonthlyPS1 = mean(PS1, 2);
MonthlyPS1 = mean(reshape(PS1, 12, 5), 2);
如果PS1是一个60乘1的实数数组,则:

MonthlyPS1 = mean(PS1);
MonthlyPS1 = mean(PS1, 2);
MonthlyPS1 = mean(reshape(PS1, 12, 5), 2);

如果PS1不是实数数组,您需要按照CST Link的要求解释PS1是什么。另外,不清楚变量月份是什么。

我将尝试编写一个解决方案,但我不确定这是否是您需要的。我的答案有一定数量的猜测

我也不会用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));

同样,我希望这就是您想要的。

返回的sizePS1是多少?sizemonth的回报是什么?Lauren:@CST Link在您提出问题9分钟后问了一个后续问题。现在已经一个小时了,你还没有回应。供你参考:这个问题目前无法回答。我会建议你把问完问题后留下来当作一条一般规则。人们来到这里只有一个原因:帮助别人。如果你是提出问题的人,不作任何回应,人们很可能会对这个问题投反对票,然后投票结束它。只是抬头一看!你会赶走那些愿意帮忙的人!谢谢,@RobertP.-我是新用户。我非常感谢您的建议。感谢@CST Link的回复。sizePS1返回1152 720 60。sizemonth返回2 60。@Lauren5 1如果我理解正确,数据集中不断出现的值60是一个月的索引,即1=第一年的第一个月,2=第一年的第二个月。。。13=第二年的第一个月。。。60=第5年的第12个月。这是正确的吗?2月变量中存储了什么?我看到它被2个索引索引,因为大小是[2,60],如果断言1是正确的,那么最后一个必须是月份。第一个索引是什么意思?3我会带着更多的问题回来,我的每条评论的字符数已经用完了-非常感谢。我知道你在做什么,这将在以后的代码中很有用。你说得对,我需要按照CST Link的要求提供更多信息。但我真的很感谢你抽出时间。