为深度学习重塑 np 数组
reshape np array for deep learning
我想使用 keras 将神经网络应用于我的时间序列数据。为了改进模型,我希望每个输出有 50 个输入时间状态。最终输入应该有 951 个样本和 50 个时间点的 10 个特征 (951, 50, 10)
因此,我必须重塑我的数据。我这样做是为了循环,但速度非常慢。有没有办法改进代码并使其更快?
示例:
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
我们可以利用 np.lib.stride_tricks.as_strided
based scikit-image's view_as_windows
to get sliding 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
我想使用 keras 将神经网络应用于我的时间序列数据。为了改进模型,我希望每个输出有 50 个输入时间状态。最终输入应该有 951 个样本和 50 个时间点的 10 个特征 (951, 50, 10)
因此,我必须重塑我的数据。我这样做是为了循环,但速度非常慢。有没有办法改进代码并使其更快?
示例:
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
我们可以利用 np.lib.stride_tricks.as_strided
based scikit-image's view_as_windows
to get sliding 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