【问题标题】:Trying to calculate annual cycle试图计算年周期
【发布时间】:2014-07-27 00:17:45
【问题描述】:

我正在尝试从 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

应该将每个月的数据转储到垃圾箱中,我以后可以在其中计算平均值。

【问题讨论】:

  • 什么返回size(PS1)?什么返回size(month)
  • Lauren:@CST-Link 在您提出问题 9 分钟后提出了后续问题。现在已经一个小时了,你还没有回复。供您参考:这个问题目前无法回答。我会建议您在提出问题后将其作为一般规则。人们来到这里只有一个原因:帮助他人。如果您是提出问题的人,但没有给出任何回应,人们可能会否决这个问题,并投票结束它。只是一个提示!你会赶走那些愿意提供帮助的人!
  • 谢谢,@RobertP。 - 我是新用户。我非常感谢您的建议。
  • 感谢@CST-Link 的回复。 size(PS1) 返回 1152 720 60。 size(month) 返回 2 60。
  • @Lauren5 1) 如果我理解正确,数据集大小中不断出现的值 60 是月份的索引,即 1 = 第一年的第一个月,2 = 第一年的第二个月年,... 13 = 第 2 年的第 1 个月,... 60 = 第 5 年的第 12 个月。它是否正确? 2) month 变量中存储了什么?我看到由 2 个索引索引(因为大小是 [2,60]),如果断言 1)正确,最后一个必须是月份。第一个索引是什么意思? 3)我会回答更多问题,我每条评论的字符数用完了数字...... :-)

标签: matlab netcdf


【解决方案1】:

如果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这个变量是什么。

【讨论】:

  • 非常感谢。我看到你在做什么,稍后在我的代码中会有用。你说得对,我需要按照 CST-Link 的要求提供更多信息。但我真的很感谢你的时间。
【解决方案2】:

我会尝试写一个解决方案,但我不确定它是否是你需要的(我的答案有一定的猜测)。

另外,我不会用 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));

再次,我希望这就是您要寻找的。​​p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多