【问题标题】:reshape np array for deep learning重塑 np 数组以进行深度学习
【发布时间】:2019-07-17 10:38:33
【问题描述】:

我想使用 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

【问题讨论】:

    标签: python numpy keras reshape


    【解决方案1】:

    我们可以利用基于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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-08
      • 2017-11-08
      • 2022-06-14
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      相关资源
      最近更新 更多