MATLAB:在一个日期查找所有值,然后过滤到一小时并找到平均值

时间:2016-10-22 14:20:01

标签: matlab datetime

我有一年的数据,每年每天记录一次数据。

日期和时间是从excel导入的(格式为243.981944,然后添加42004(2015年为2015年),格式化为31.8.15 23:34:00)。

导入MATLAB就成了 '31 / 08/2015 23:34:00'

我要求每年每天的数据按小时间隔进行,因此我需要将每小时记录的数据相加,然后将该数据除以该小时记录的数据,得出每小时的平均值。 / p>

由于某种原因,8月的数据实际上以2分钟的间隔递增,每隔一个月的数据以1分钟的间隔递增。 即

... 31/07/2015 23:57:00 31/07/2015 23:58:00 31/07/2015 23:59:00 31/08/2015 00:00:00 31/08/2015 00:02:00 31/08/2015 00:04:00 ...

我不确定如何找到特定日期和时间的所有值以计算平均值。我正在考虑使用for循环来查找每天的值,但是当我开始编写代码时,我认为这不会像我想的那样工作。 我认为必须有某种功能可以按日期和时间过滤数据?

编辑:

所以我尝试了以下但是我得到了这些错误。 dates是一个520000x1单元格数组,其中包含日期格式= formatIn。

 formatIn = 'DD/MM/YYYY HH:MM:SS';
 [~,M,D,H] = datevec(dates, formatIn);

 Error using cnv2icudf (line 131) Unrecognized minute format.
 Format string: DD/MM/YYYY HH:MM:SS.

 Error in datevec (line 112) icu_dtformat = cnv2icudf(varargin{isdateformat});`

1 个答案:

答案 0 :(得分:0)

假设您的数据位于名为A的字符串的矩阵或单元格数组中,而您的其他数据位于向量X中。假设所有数据都在同一年(所以我们可以忽略多年)

[~,M,D,H] = datevec(A, 'dd/mm/yyyy HH:MM:SS');

mean_A = accumarray([M, D, H+1], X, [], @mean);

然后二月的数据将在

mean_A(2,:,:)

要查看数据,您可能会发现squeeze()功能很有用,例如

squeeze(mean_A(2,1:10,13:24))

显示2月份前10天(按行)中午(按栏)后的小时数的平均值。

另见:

Counting values by day/hour with timeseries in MATLAB