将NumPy数组调整为较小的大小而不复制

时间:2015-09-04 12:18:39

标签: 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])

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

1 个答案:

答案 0 :(得分:3)

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])