Matlab,在矩阵中转换日期时间数组

时间:2017-05-06 13:57:40

标签: matlab datetime matrix

我有一个日期时间数组,突出显示函数“datepeak”的峰值,对于一年中的每一天。我使用日期时间数组“date”获得它,并使用峰值“position”的位置获得数组。

t1 = datetime(year,1,1,0,0,0);
t2 = datetime(year,12,31,23,59,0);
date = t1:minutes(1):t2;
datepeak=date(position);

我需要在第1天获取n个峰值并将此数组转换为矩阵的第一行,依此类推。 由于峰的数量不是常数(min 3 max 4),我试图像这样启动矩阵:

matrix=NaN(365,4)

然后我用这个双循环覆盖每一行的NaN:

for i=1:365
v=datepeak(day(datepeak,'dayofyear')==i);
for c=1:length(v)
    matrix(i,c)=(v(c));
end
end

这个循环有效(我用峰值尝试过),但是在日期时间我得到一个错误。

以下是粘贴的示例:

year=2016;
position=[128 458 950];
t1 = datetime(year,1,1,0,0,0);
t2 = datetime(year,12,31,23,59,0);
date = t1:minutes(1):t2;
datepeak=date(position);

matrix=NaN(365,4);

for i=1:365
v=datepeak(day(datepeak,'dayofyear')==i);
for c=1:length(v)
    matrix(i,c)=(v(c));
end
end

1 个答案:

答案 0 :(得分:1)

nan数组属于double类,而datepeak属于类datetime,因此您无法将它们存储在同一个数组中。您表示数据的方式应该取决于您以后要用它们做什么(以及可行的方法)。在您的情况下,我将假设列表365元素,包含当天的(任意数字)高峰时间是可以的。

year=2016;
position=[128 458 950];
t1 = datetime(year,1,1,0,0,0);
t2 = datetime(year,12,31,23,59,0);
date = t1:minutes(1):t2;
datepeak=date(position);

peaktimes_list = cell(365,1);

for i=1:365
    peaktimes_list{i} = datepeak(day(datepeak,'dayofyear')==i);
end

编辑:对于365x4单元格数组,请更改最后一部分:

peaktimes = cell(365,4);

for i=1:365
    v = datepeak(day(datepeak,'dayofyear')==i);
    nv = numel(v);
    peaktimes(i,1:nv) = num2cell(v);
end

当少于4个值时,其余列将为空。