我只是在查看以下numpy信息图。
https://s3.amazonaws.com/assets.datacamp.com/blog_assets/numpy_python_cheat_cheat_sheet.pdf
我想知道np.copy(a)
和a.copy()
之间是否有任何区别 - 还是它们只是同义操作的同义词?
如果a
是numpy.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])]