无需复制即可将 NumPy 数组调整为较小的大小

lua*_*tor 6 python arrays numpy

当我使用该resize方法缩小一个 numpy 数组时(即数组由于 变小resize),是否保证不进行复制?

例子:

a = np.arange(10)            # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a.resize(5, refcheck=False)  # array([0, 1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这应该始终是可能的,而无需复制。我的问题:实施是否确实保证总是如此?不幸的是,调整大小的文档对此一无所知。

Wol*_*lph 4

numpy 数组是后台固定大小的数组,任何类型的大小调整都将始终复制该数组。

话虽如此,您可以仅使用数组的子集有效地创建数组的切片,而无需调整大小/复制。

>>> import numpy
>>> a = numpy.arange(10)
>>> b = a[:5]
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b
array([0, 1, 2, 3, 4])
>>>
>>> a += 10
>>> a
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
>>> b
array([10, 11, 12, 13, 14])
>>>
>>> b += 10
>>> a
array([20, 21, 22, 23, 24, 15, 16, 17, 18, 19])
>>> b
array([20, 21, 22, 23, 24])
Run Code Online (Sandbox Code Playgroud)