【发布时间】:2021-05-17 01:29:31
【问题描述】:
有没有办法用 numpy 或 python 来提高这段代码的性能?
目标是建立一个训练集。 features 是原始数据。我想使用跨步长度为 1 的移动窗口方法来“丰富”数据。最后,我希望将数据从 2D 数组重塑为 3D 数组,因为一个训练输入的形状为 (windowSize, features.shape[1])。
import numpy as np
windowSize = 4
features = np.array([[1,2],[3,4],[5,6],[7,8],[9,10],[11,12],[13,14],[15,16],[17,18],[19,20]])
featuresReshaped = features[:windowSize]
for i in range(1, features.shape[0], 1):
featuresReshaped = np.vstack((featuresReshaped, features[i:i+windowSize]))
maxindex = int(featuresReshaped.shape[0]/windowSize) * windowSize
featuresReshaped = featuresReshaped[:maxindex]
featuresReshaped = featuresReshaped.reshape(int(featuresReshaped.shape[0]/windowSize), windowSize, featuresReshaped.shape[1])
【问题讨论】:
-
我在底部试了
print(featuresReshaped),底部切片(featuresReshaped[-1])稍微打破了移动窗口的模式,应该是这样吗? -
使用重复的
vstack很慢。收集列表中的窗口,最后只做一个vstack。可以使用as_strided(或使用它的窗口函数)制作移动窗口view,但后续操作可能会强制复制。 -
@hpaulj 感谢您的回复。我不完全理解。你能给我看一个代码示例吗?
标签: arrays python-3.x numpy optimization dataset