【问题标题】:Matlab, converting datetime array in matrixMatlab,在矩阵中转换日期时间数组
【发布时间】:2017-05-06 13:57:39
【问题描述】:

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

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 个峰值并将这个数组转置到矩阵的第一行,依此类推。 由于峰值的数量不是常数(最小 3 最大 4),我尝试像这样启动矩阵:

matrix=NaN(365,4)

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

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

这个循环有效(我在峰值上尝试过),但使用 datetime 时出现错误。

这是一个粘贴示例:

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

【问题讨论】:

  • 你得到什么错误?
  • 从日期时间转换为双精度时出现以下错误:未定义函数“双精度”用于“日期时间”类型的输入参数。要将日期时间转换为数值,首先减去日期时间原点,然后使用 SECONDS、MINUTES、HOURS、DAYS 或 YEARS 函数转换为数值。
  • 从日期时间转换为双精度时出现以下错误:未定义函数“双精度”用于“日期时间”类型的输入参数。要将日期时间转换为数值,首先减去日期时间原点,然后使用 SECONDS、MINUTES、HOURS、DAYS 或 YEARS 函数转换为数值。
  • 我认为是因为 NaN 矩阵需要双精度值
  • 您绝对需要 365x4 阵列吗?包含 365 个元素的列表,每个元素都包含一天中的 3 个或 4 个峰值可以吗?

标签: matlab datetime matrix


【解决方案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 个时,剩余的列将为空。

【讨论】:

  • 谢谢我要创建一个表。一旦我得到带有日期时间的矩阵: result=table(peak(:,1),datematrix(:,1),peak(:,2),datematrix(:,2),peak(:,3),日期矩阵(:,3),峰值(:,4),日期矩阵(:,4));
  • 我认为您打算在循环中使用“peaktimes”而不是“peaktimes_list”。无论如何它工作正常。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 2015-07-26
  • 1970-01-01
  • 2012-07-01
相关资源
最近更新 更多