我将时间序列数据作为numpy数组。我想生成这样的数据的时间延迟嵌入:
时间序列是这样的:
[[ 1. 37.17]
[ 2. 36.99]
[ 3. 36.84]
[ 4. 37.57]
[ 5. 37.49]
[ 6. 37.45]
[ 7. 37.82]
[ 8. 37.95]
[ 9. 37.36]
[ 10. 37.84]
[ 11. 37.85]
[ 12. 37.12]]
假设我的窗口大小(w)= 4且间隙(g)= 2.我们将选择每个第3个点,直到我们得到点=窗口大小形成一个' w'维度点。对于下一个' w'尺寸点我们将系列移动1并对移位系列重复相同的过程。这将给我们几个' w'最终将存储在2D numpy数组中的维度点。当我们不能形成时,我们就会停止。尺寸点,即当我们到达系列结束时。
然后这个系列的时间延迟嵌入应该是:
[[ 37.17 37.57 37.82 37.84]
[ 37.99 36.49 36.95 37.85]
[ 37.84 37.45 36.36 37.12]]
我们将在这个特定点停下来,因为对于4维中的下一个点,我们将用完第四点。我有大约1600点的长时间序列,我希望参数w和g是可变的。该功能将采用' w'并且' g'和给定的时间序列,并将吐出时间延迟嵌入。
答案 0 :(得分:2)
想法是生成重建索引矩阵
A = np.array([ 37.17, 36.99, 36.84, 37.57, 37.49, 37.45,
37.82, 37.95, 37.36, 37.84, 37.85, 37.12])
w = 4
g = 2
使用w
和g
A[(np.arange(w)*(g+1))+ np.arange(np.max(a.shape[0] - (w-1)*(g+1), 0)).reshape(-1,1)]
输出:
array([[ 37.17, 37.57, 37.82, 37.84],
[ 36.99, 37.49, 37.95, 37.85],
[ 36.84, 37.45, 37.36, 37.12]])
如果A
是矩阵[index, value]
,则添加值列索引A[n...) ,1]
更新1
# incorrect step count calculation was replaced by a.shape[0]-(w-1)*(g+1)
更新2
# added max to avoid errors on impossible values of g and w
检查使用过的函数np.arange,np.reshape,broadcasting rules和indexing的文档。