【问题标题】:Using Matlab to average daily data (rasters) to monthly averages使用 Matlab 将每日数据(栅格)平均到每月平均值
【发布时间】:2015-05-03 18:35:46
【问题描述】:

我有 2192 个栅格代表每日时间步长气候数据(2008 年 1 月 1 日至 2013 年 3 月 31 日),我想将其汇总为每月平均值(即给定月份和年份内的所有数据的平均值)。

我可以将数据加载到 Matlab 中,以创建大小为 110x57x2192 的 3D 矩阵。 2192 表示从 2008 年 1 月 31 日到 2013 年 3 月 31 日的时间维度。

我已经尝试过在 excel 中使用编号,但我不确定如何正确设置语法。理想情况下,月均值应替换内存中导入的每日数据。我在 Excel 中的编号有四列:日期、日期、月份和年份。忽略任何 NA 像素,像素的平均值基于给定月份的非 NA 像素。

%create monthly averages from daily data
numbering = xlsread('Numbering.xslx', B1:D2192);
month=numbering(:,2);
years=unique(year);

这是我用于编号的excel文件的前三行和后三行

2008 年 1 月 1 日 1 1 2008
2008 年 2 月 1 日 2 1 2008
2008 年 3 月 1 日 3 1 2008
29/12/2013 29 12 2013
30/12/2013 30 12 2013
31/12/2013 31 12 2013
31/12/2013 31 12 2013

【问题讨论】:

  • 您的 Excel 中确实是日期、月份和年份还是 、月份和年份?
  • 请注意,数据不在excel中,而是在上面的代码中我试图使用excel来创建索引。 excel文件有4列d/m/yy;日、月、年

标签: matlab


【解决方案1】:

以下是我解决问题的方法:

% Getting month breaks by detecting changes in days
day=numbering(:,2); % Day column from Excel
final_idx = find(diff(day)~=1);
initial_idx = [1 ; final_idx(1:end-1)-1];

%Number of months
nom = length(final_idx);

% Pre-allocating space for monthly mean
monthlymeans = nan(110,57,nom);

% Calculating means
for ii=1:nom
    monthlymeans(:,:,ii) = nanmean(3dmatrix(:,:,initial_idx(ii):final_idx(ii)),3);
end

请注意,我假设数据包含在一个名为 3dmatrix 的变量中,并且 NA 像素值实际上是 NaN,因为我无权访问您的原始数据。

【讨论】:

  • >> day=numbering(:,1); final_idx = diff(天)~=1; initial_idx = [1 final_idx(1:end-1)-1];使用 horzcat 时出错 被连接的矩阵的维度不一致。
  • 带有 initial_idx 的行会触发错误。同样在工作区中,“nom”的维度是 2191,即天数。由于 initial_idx 不起作用,我没有计算方法。以防它与我的excel有关,A列是m / d / y;B是天,C是月,D是年。电子表格没有标题。
  • ps。 NA 像素值为 NaN;数据包含在一个 3D 矩阵(你称之为 3dmatrix)中,时间维度是天。
  • day 应该是您的 excel (B) 中的天数列,我对此进行了调整。 nom的维度应该接近2192/30。我还在第 4 行更改了一个细节,我希望它可以摆脱 horzcat。矩阵中已经有 nan 的事实让事情变得更容易
  • 在最新的编辑中,horzcat 消失了,但是尺寸仍然不正确。 nom 维度仍然是 2191,此外,最后一节中似乎存在如下错误:警告:冒号操作数不应该是合乎逻辑的。警告:冒号操作数不应该是合乎逻辑的。下标索引必须是实数正整数或逻辑数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多