我有一个日期时间数组,突出显示函数“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
答案 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个值时,其余列将为空。