我可以使用 array.resize(shape) 来调整我的数组的大小,并将零添加到那些没有任何值的索引中。如果我的数组是 [1,2,3,4] 并且我使用 array.resize[5,0] 我得到 [1,2,3,4,0] 。如何将零附加/填充到前面,产生 [0,1,2,3,4]

我正在动态地执行此操作 - 尝试使用:

array.resize(arrayb.shape)

我想避免(不惜一切代价)制作数组的内存副本。即反转数组,调整大小,然后再次反转。使用 View 工作将是理想的。

最佳答案

我相信你可以使用切片分配来做到这一点。我看不出为什么 numpy 需要为这样的操作制作副本,只要它对重叠进行必要的检查(当然,正如其他人所指出的,resize 本身可能必须分配一个新的内存块)。我用一个非常大的数组测试了这个方法,我没有看到内存使用量的增加。

>>> a = numpy.arange(10)
>>> a.resize(15)
>>> a[5:] = a[:10]
>>> a[0:5] = 0
>>> a
array([0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

以下显示分配操作的内存使用量没有跳跃:
>>> a = numpy.arange(100000000)
>>> a.resize(150000000)
>>> a[50000000:] = a[:100000000]

我不知道更好的方法,这只是一个猜想。如果它不起作用,请告诉我。

关于python - Numpy array.resize() - 零 'first',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12269506/

10-12 07:38