我有一个NumPy数组作为时间序列数据。我想生成类似于以下的时间延迟嵌入数据:
时间序列如下:
假设我的窗口大小(w)= 4,间隔(g)= 2。我们会选择每3个点,直到我们得到的点 = 窗口大小,以形成一个“w”维点。对于下一个“w”维点,我们将系列向右移动1位,并为移动后的系列重复相同的过程。这将为我们提供几个“w”维点,最终将存储在2D numpy数组中。当我们无法形成“w”维点时停止,即当我们到达系列的末尾时。
然后,该系列的时间延迟嵌入应该是:
我们将在这个特定的点停止,因为对于第四维中的下一个点,我们将用完第四个点。我有大约1600个点的长时间序列,并且我希望参数w和g是可变的。该函数将取'w'和'g'以及时间序列作为给定,并输出时间延迟嵌入。
时间序列如下:
[[ 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数组中。当我们无法形成“w”维点时停止,即当我们到达系列的末尾时。
然后,该系列的时间延迟嵌入应该是:
[[ 37.17 37.57 37.82 37.84]
[ 37.99 36.49 36.95 37.85]
[ 37.84 37.45 36.36 37.12]]
我们将在这个特定的点停止,因为对于第四维中的下一个点,我们将用完第四个点。我有大约1600个点的长时间序列,并且我希望参数w和g是可变的。该函数将取'w'和'g'以及时间序列作为给定,并输出时间延迟嵌入。
max
来避免在 g 和 w 不可能的值上出现错误。 - ilia timofeevw
大小的窗口将是[0,g+1,2*(g+1),..,(w-1)*(g+1)]
,移动后它变成矩阵[[0,..,(w-1)*(g+1)], [1,..,1+(w-1)*(g+1)], ..[n,..,n+(w-1)*(g+1)]]
,其中n
是行数减去最大窗口移位rows - (w-1)*(g+1)
。第一行是(g+1)*[0,1,..w-1]
,我们通过添加向量(列)[[0,1,..,n]]
将其填充到矩阵中。 通过向行添加列,我们调用了numpy
广播机制。 它“生成”重复的列和行两个矩阵,然后将它们相加。 - ilia timofeev