【发布时间】:2016-08-16 11:43:19
【问题描述】:
我有时间序列,我将一些用户定义的函数应用于时间序列中的每个 W 元素。
现在我只是使用 for 循环,大小为 W 的滑动窗口,并在每次迭代时将我的函数应用于窗口中的元素。
我正在使用 Matlab,它的“for 循环”效率非常低,所以我很想对这个操作进行矢量化。
作为一种解决方案,我看到将长度为 N 的信号转换为大小为 (N - 1, W) 的矩阵,其中每一行是不同窗口中的时间序列,并将函数应用于该矩阵。
所以,我的问题是:
- 如何将我的初始时间序列转换为这样的矩阵?
- 假设我正在使用步骤 X 滑动窗口。因此不会出现 (N - 1, W) 矩阵,而是 ((N - 1) / X, W)。 ([1] 中矩阵的每 X 行)
例子:
假设我的时间序列是:
T = [1, 5, 6, 8, 10, 14, 22]
W = 3
X = 1
=> 我很想得到
[[1, 5, 6],
[5, 6, 8],
[6, 8, 10],
[8, 10, 14],
[10, 14, 22]]
如果
W = 3
X = 2
=> 我很想得到
[[1, 5, 6],
[6, 8, 10],
[10, 14, 22]]
【问题讨论】:
-
在矢量化之前需要有更多的先验信息。尽管如此,我没有看到没有 for 循环的方法......
-
你需要计算什么样的操作?卷积对您没有帮助吗?
-
不要这么快关闭循环;有时它们比替代品更快。但我同意之前的 cmets,我们需要更多关于您需要在这些窗口上执行的操作的信息。
标签: matlab matrix time-series vectorization sliding-window