重塑np数组以进行深度学习

时间:2019-02-23 13:45:37

标签: python numpy keras reshape

我想使用keras将神经网络应用于时间序列数据。为了改善模型,我希望每个输出具有50个输入的时间状态。最终输入应包含951个样本,其中包含10个特征(951、50、10)的50个时间点

因此,我必须重塑数据。我这样做是为了for循环,但速度非常慢。有没有办法改善代码并使其更快?

示例:

import numpy as np
X = np.ones((1000,10))

for i in range(50, int(X.shape[0]) + 1):
     if i == 50:
        z = 0
        X2 = np.array(X[z:i, :]).reshape((1, 50, X.shape[1]))
     else:
        X2 = np.concatenate([X2, np.array(X[z:i, :]).reshape((1, 50, X.shape[1]))])
     z = z + 1

1 个答案:

答案 0 :(得分:2)

我们可以利用基于np.lib.stride_tricks.as_stridedscikit-image's view_as_windows来获取滑动窗口。 More info on use of as_strided based view_as_windows

from skimage.util.shape import view_as_windows

X2 = view_as_windows(X,(50,10))[:,0]

这只是输入的视图,因此在运行时实际上是免费的-

In [17]: np.shares_memory(X,view_as_windows(X,(50,10))[:,0])
Out[17]: True

In [18]: %timeit view_as_windows(X,(50,10))[:,0]
10000 loops, best of 3: 32.8 µs per loop