numpy.copy #
- 麻木的。复制( a , order = 'K' , subok = False ) [来源] #
返回给定对象的数组副本。
- 参数:
- 类似数组
输入数据。
- 顺序{'C', 'F', 'A', 'K'},可选
控制副本的内存布局。 'C' 表示 C 阶,'F' 表示 F 阶,如果a是 Fortran 连续的,'A' 表示 'F',否则为 'C'。 'K' 表示尽可能匹配a的布局。 (请注意,此函数 和
ndarray.copy
非常相似,但其 order= 参数具有不同的默认值。)- subok布尔,可选
如果为 True,则子类将被传递,否则返回的数组将被强制为基类数组(默认为 False)。
1.19.0 版本中的新增内容。
- 返回:
- 数组
的数组解释。
也可以看看
ndarray.copy
创建数组副本的首选方法
笔记
这相当于:
>>> np.array(a, copy=True)
例子
创建一个数组 x,带有引用 y 和副本 z:
>>> x = np.array([1, 2, 3]) >>> y = x >>> z = np.copy(x)
请注意,当我们修改 x 时,y 会改变,但 z 不会改变:
>>> x[0] = 10 >>> x[0] == y[0] True >>> x[0] == z[0] False
请注意,np.copy 清除先前设置的 WRITEABLE=False 标志。
>>> a = np.array([1, 2, 3]) >>> a.flags["WRITEABLE"] = False >>> b = np.copy(a) >>> b.flags["WRITEABLE"] True >>> b[0] = 3 >>> b array([3, 2, 3])
请注意,np.copy 是浅复制,不会复制数组中的对象元素。这对于包含 Python 对象的数组非常重要。新数组将包含相同的对象,如果该对象可以修改(可变),则可能会导致意外:
>>> a = np.array([1, 'm', [2, 3, 4]], dtype=object) >>> b = np.copy(a) >>> 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)