假设我有一个 Python Numpy 数组 a
。
a = numpy.array([1,2,3,4,5,6,7,8,9,10,11])
我想从这个长度为5的数组中创建一个步幅为3的子序列矩阵。因此,结果矩阵将如下所示:
numpy.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
实现这个的一种可能的方法是使用 for 循环。
result_matrix = np.zeros((3, 5))
for i in range(0, len(a), 3):
result_matrix[i] = a[i:i+5]
有更简洁的方法在Numpy中实现这个吗?
as_strided
,但发现它会导致非常严重的内存泄漏问题。这对于小数组来说不是问题,但即使在服务器上使用了64GB的内存,我的Python程序也会出现 MemoryError 错误。强烈建议使用broadcasting_app
方法。 - pacificgilly1992writeable
标志可以添加到更安全的一侧。像scikit-image
这样的模块也使用as_strided
。 - Divakarn = a.strides[0]
是正确的。 - Divakar