【问题标题】:daily to monthly sum in matlab of multiple years多年matlab中的每日到每月总和
【发布时间】:2015-09-18 09:31:04
【问题描述】:

我的数据是 excel 列。在 Excel 工作表中,一列包含最近 50 年的日期(无缺失日期;dd/mm/yyyy 格式),另一列包含每日降雨量(过去 50 年;无空白)。

我想在 Matlab 中计算过去 50 年中每个月的月降雨量总和。请记住,有四种类型的月底日期:30、31、28 和 29。到目前为止,我可以从下面的 excel 文件中读取日期和降雨量值

filename = 'rainfalldate.xlsx';

% Extracts the data from each column of textData

[~,DateString ]= xlsread(filename,'A:A')

formatIn = 'dd/mm/yyyy';

DateVector = datevec(DateString,formatIn)

rainfall = xlsread(filename,'C:C');

下一步是什么,以便我可以看到过去五十年每个月的降雨量总和?

我的意思是假设 1986 年 7 月的降雨量总和......任何新的解决方案?Matlab 2014a 中的代码或循环库

【问题讨论】:

  • 但是您已经将其转换为日期向量,您现在要做的就是索引正确的年份和月份(您可以使用 find 进行此操作),然后对其进行总结...跨度>
  • 看看accumarray

标签: matlab loops


【解决方案1】:

正如@Daniel 建议的那样,您可以为此使用accumarray

由于您想要多年的每月降雨量,您可以将年份和月份合并为一个变量,ym

然后可以确定一个值是否同时属于确定的年份月,并使用histc 函数“标记”它。具有相似“标签”的值由 accumarray 函数求和。

作为奖励,您不必担心一个月的天数。看看这个例子:

% Variables initialization
y=[2014 2014 2015 2015 2015 2014 2014 2015 2015];
m=[1 1 1 2 2 3 3 3 3]; % jan, feb and march
values = 1:9;

% Identifyier creation and index generation
ym = y*100+m;
[~,subs]=histc(ym,unique(ym));

% Sum
total = accumarray(subs',values);

total 变量是已经按年和月排序的月降雨量 (yyyymm)。

【讨论】:

  • 没问题。只要让我知道答案是否对您有用,请接受它。如果您有任何疑问,请询问
猜你喜欢
  • 2013-01-16
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多