array.copy()与numpy.copy(array)之间的区别

时间:2019-05-07 18:17:28

标签: python numpy

我只是看下面的数据图表。

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

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

1 个答案:

答案 0 :(得分:4)

如果anumpy.array,则结果将相同。但是如果a是其他内容,则a.copy()将返回与a相同的类型,或者根据其类型而失败,并且np.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参数,以不同的默认值定义副本中的内存顺序。在np.copy中,它是'K',表示“使用尽可能接近原始顺序的顺序”;在ndarray.copy中,它是'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])]