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



我只是在查看以下numpy信息图。

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

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

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

最新更新