首页 > 解决方案 > array.copy() 与 numpy.copy(array) 之间的区别

问题描述

我只是在看下面的 numpy 信息图。

https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Numpy_Python_Cheat_Sheet.pdf

我想知道np.copy(a)和之间是否有任何区别a.copy()- 或者它们只是同一操作的同义词?

标签: pythonnumpy

解决方案


如果a是 a numpy.array,结果将是相同的。但是 ifa是别的东西,将根据其类型a.copy()返回相同的类型或失败,并且总是返回。尝试,例如以下:anp.copy(a)numpy.array

import pandas as pd

for x in (list(range(3)), np.array(range(3)), pd.Series(range(3))):
    print()
    print(repr(x.copy()))
    print(repr(np.copy(x)))

UPD:还有另一个区别。这两种方法都有一个附加order参数,用于定义具有不同默认值的副本中的内存顺序。in np.copyit is 'K',表示“使用尽可能接近原始的顺序”,in ndarray.copyit is 'C'(使用 C 顺序)。例如

x = np.array([[1,2,3],[4,5,6]], order='F')
for y in [x, np.copy(x), x.copy()]:
    print(y.flags['C_CONTIGUOUS'], y.flags['F_CONTIGUOUS'])

将打印

False True
False True
True False

在这两种情况下,副本在数组数据本身被复制的意义上是深的,但在对象数组的情况下对象本身没有被复制的意义上是浅的。这可以证明

x = np.array([1, [1,2,3]])
y = x.copy()
z = np.copy(x)
y[1][1] = -2
z[1][2] = -3
print(x)
print(y)
print(z)

所有三个打印行都是

[1 list([1, -2, -3])]

推荐阅读