我有一年的数据,每年每天记录一次数据。
日期和时间是从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});`
答案 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天(按行)中午(按栏)后的小时数的平均值。
另见: