如何获取从特定索引开始的numpy数组的“窗口”?

时间:2018-11-17 22:44:26

标签: python arrays numpy keras stride

给定一个1D数组A,一个窗口宽度N=10,我正在创建一个A的“ windows”的2D数组,从索引idx开始:

import numpy as np
A = np.arange(100)
idx = [1, 5, 3, 12]
N = 10

B = np.zeros((len(idx), N))
for k, i in enumerate(idx):
    B[k, :] = A[i:i+N]

print (B)

#[[  1.   2.   3.   4.   5.   6.   7.   8.   9.  10.]  
# [  5.   6.   7.   8.   9.  10.  11.  12.  13.  14.]  
# [  3.   4.   5.   6.   7.   8.   9.  10.  11.  12.]  
# [ 12.  13.  14.  15.  16.  17.  18.  19.  20.  21.]]  

问题:如何更有效地执行此操作?我认为可能有一个numpy函数,但我不知道它的名字。


性能旁注:

假设A有1000万个项目,而N=1000,则B会非常大(100亿个float32项目,很难放入RAM!)。

由于B的值仅是从A获取的数据窗口,是否有一种方法可以更有效地将B放入RAM?< / em>

用例:我想使用以下数据将数据提供给Keras神经网络训练

model.fit(B, ...)

所以我正在寻找可用于Keras / Tensorflow的解决方案。

0 个答案:

没有答案