gpt4 book ai didi

matlab - 在 MATLAB 中使用时间序列按天/小时计算值

转载 作者:行者123 更新时间:2023-12-04 05:38:00 25 4
gpt4 key购买 nike

所以,我开始在 MATLAB 中使用时间序列,但我有点卡住了。

我有一个我导入到 MATLAB 中的事件时间戳列表。它现在是一个 3000x25 的数组,看起来像
2000-01-01T00:01:01+00:002000-01-01T00:01:02+00:002000-01-01T00:01:03+00:002000-01-01T00:01:04+00:00
如您所见,每个事件都是按日期、小时、分钟、秒等记录的。

现在,我想按日期、小时等计算事件数量,然后进行各种分析(回归等)。

我考虑过为每一天创建一个时间序列对象,但考虑到数据的大小,这不切实际。

有什么方法可以操作这个数组,使我们有“日期:事件数”?
也许只有一种更简单的方法来使用时间序列计算事件?

最佳答案

others已经建议,您应该将字符串日期转换为序列日期数字。这使得处理数字数据变得容易。

计算每个时间间隔(天、小时、分钟等)的事件数的一种有效方法是使用类似 HISTC 的函数。和 ACCUMARRAY .流程会涉及manipulating将序列日期转换为此类函数所需的单位/格式(例如 ACCUMARRAY 需要整数,而 HISTC 需要给出 bin 边缘以指定范围)。

这是使用 ACCUMARRAY 计算事件数的矢量化解决方案(无循环)。这是一个非常有效的功能(即使是大输入)。一开始,我生成了一些在 4 天内不均匀间隔的 5000 个时间戳的样本数据。您显然想用自己的替换它:

%# lets generate some random timestamp between two points (unevenly spaced)
%# 1000 timestamps over a period of 4 days
dStart = datenum('2000-01-01'); % inclusive
dEnd = datenum('2000-01-5'); % exclusive
t = sort(dStart + (dEnd-dStart).*rand(5000,1));
%#disp( datestr(t) )

%# shift values, by using dStart as reference point
dRange = (dEnd-dStart);
tt = t - dStart;

%# number of events by day/hour/minute
numEventsDays = accumarray(fix(tt)+1, 1, [dRange*1 1]);
numEventsHours = accumarray(fix(tt*24)+1, 1, [dRange*24 1]);
numEventsMinutes = accumarray(fix(tt*24*60)+1, 1, [dRange*24*60 1]);

%# corresponding datetime range/interval label
days = cellstr(datestr(dStart:1:dEnd-1));
hours = cellstr(datestr(dStart:1/24:dEnd-1/24));
minutes = cellstr(datestr(dStart:1/24/60:dEnd-1/24/60));

%# display results
[days num2cell(numEventsDays)]
[hours num2cell(numEventsHours)]
[minutes num2cell(numEventsMinutes)]

这是每天事件数的输出:
'01-Jan-2000'    [1271]
'02-Jan-2000' [1258]
'03-Jan-2000' [1243]
'04-Jan-2000' [1228]

以及每小时事件数的摘录:
'02-Jan-2000 09:00:00'    [50]
'02-Jan-2000 10:00:00' [54]
'02-Jan-2000 11:00:00' [53]
'02-Jan-2000 12:00:00' [74]
'02-Jan-2000 13:00:00' [49]
'02-Jan-2000 14:00:00' [59]

同样的分钟:
'03-Jan-2000 08:54:00'    [1]
'03-Jan-2000 08:55:00' [1]
'03-Jan-2000 08:56:00' [1]
'03-Jan-2000 08:57:00' [0]
'03-Jan-2000 08:58:00' [0]
'03-Jan-2000 08:59:00' [0]
'03-Jan-2000 09:00:00' [1]
'03-Jan-2000 09:01:00' [2]

关于matlab - 在 MATLAB 中使用时间序列按天/小时计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11671588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com