numpy.ndarray.copy#

方法

ndarray.copy(order='C')#

返回数组的副本。

参数:
**order**{‘C’, ‘F’, ‘A’, ‘K’}, 可选

控制副本的内存布局。'C' 表示 C 顺序,'F' 表示 Fortran 顺序,'A' 表示如果 a 是 Fortran 连续的,则为 'F',否则为 'C'。'K' 表示尽可能地匹配 a 的布局。 (注意,此函数和 numpy.copy 非常相似,但它们 order= 参数的默认值不同,并且此函数始终将子类传递。

另请参阅

numpy.copy

具有不同默认行为的类似函数

numpy.copyto

注释

此函数是创建数组副本的首选方法。函数 numpy.copy 类似,但它默认使用 order 'K',并且默认情况下不会传递子类。

示例

>>> import numpy as np
>>> x = np.array([[1,2,3],[4,5,6]], order='F')
>>> y = x.copy()
>>> x.fill(0)
>>> x
array([[0, 0, 0],
       [0, 0, 0]])
>>> y
array([[1, 2, 3],
       [4, 5, 6]])
>>> y.flags['C_CONTIGUOUS']
True

对于包含 Python 对象的数组(例如,dtype=object),副本是浅副本。新数组将包含相同的对象,如果该对象可以修改(可变),则可能会导致意外情况。

>>> a = np.array([1, 'm', [2, 3, 4]], dtype=object)
>>> b = a.copy()
>>> b[2][0] = 10
>>> a
array([1, 'm', list([10, 3, 4])], dtype=object)

若要确保 object 数组中的所有元素都被复制,请使用 copy.deepcopy

>>> import copy
>>> a = np.array([1, 'm', [2, 3, 4]], dtype=object)
>>> c = copy.deepcopy(a)
>>> c[2][0] = 10
>>> c
array([1, 'm', list([10, 3, 4])], dtype=object)
>>> a
array([1, 'm', list([2, 3, 4])], dtype=object)