给定一个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的解决方案。