在Python

时间:2018-02-24 20:17:06

标签: python numpy

我将时间序列数据作为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'和给定的时间序列,并将吐出时间延迟嵌入。

1 个答案:

答案 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

使用wg

进行延时嵌入
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.arangenp.reshapebroadcasting rulesindexing的文档。