在多年的matlab中每日每月总和

时间:2015-09-18 09:31:04

标签: matlab loops

我的数据是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');

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

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

1 个答案:

答案 0 :(得分:0)

正如@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)排序的月降雨量。