【发布时间】:2016-04-16 21:38:12
【问题描述】:
假设以下时间序列 (ts) 具有赋值:
time val
15:00 4
15:45 7
17:12 2.3
17:50 2.9
时间戳中的每个值在下一个出现之前都是有效的。因此,从 15:00 到 15:45 的值为 4,或者从 15:45 到 17:12 的值为 2.3。这些时间戳之间的每个新数据点都应该具有相同的值。我想要的是一个新的 ts,具有恒定的时间间隔和预定义的起点。假设起点是 15:00,间隔应该是 30 分钟。通常,我可以使用同步函数 - 但是,该函数使用插值方法,这不是我在这里需要的,因为数据点之间的值不应该被插值,而是在时间戳重叠时取平均值。
新的 ts 应该是这样的:
time val
15:00 4
15:30 5.5
16:00 7
16:30 7
17:00 4.18
时间戳 15:30 的值计算为 = (4*15+7*15)/30,以此类推。我已经实现了一个代码,它能够通过应用带有大量 if 语句的 trapz 函数来解决这个问题。但是,我想知道是否有更好/更简单的解决方案,作为修改后的同步功能,因为我有超过 500.000 个数据点。
提前致谢
【问题讨论】:
-
当你做平均时,它几乎和做插值一样(它实际上是线性插值)。你 16:00 和 16:30 的平均值都是 7,这是怎么回事?
-
是的,但不是在时间戳内的其他时间戳的情况下(例如,源自 15:45 时间戳的新时间戳 16:00)。 16:00 的值从 16:00 到 16:30 有效,16:30 的值在 17:00 之前有效。从原始数据集中得到这个时间段的值为7(从15:45的时间戳到17:12有效)
-
我认为在这种情况下,您希望在插值之前四舍五入到最近的时间戳。
-
我不确定你的意思。我想使用 resample(ts1,'15:00':'0:30':'17:00') 或 synchronize(ts1,ts2) 之类的东西,其中 ts2 包括 ['15:00':'0:30' :'17:00'],但我不知道如何正确修改解释方法以考虑我的情况:)
标签: matlab time time-series average synchronize