Python copy.copy() vs NumPy np.copy()

4

在使用浅复制时,是否有情况需要使用NumPy的np.copy()而不是Python的copy.copy()方法?据我所知,两者都可以创建浅复制,但NumPy仅限于数组。是否有任何性能或特殊处理由NumPy完成而未被copy考虑到的情况?


首先,实现方式会有所不同。此外,您无需导入copy即可使用copy - cs95
1
我们可以再次确认一下,但我认为copy.copy只是在可能的情况下将操作委托给对象自己的复制方法。实际上,您可以自己阅读copy.copy代码。arr.__copy__是一个方法。np.copy也是Python代码。 - hpaulj
1
我经常看到并使用arr.copy() - hpaulj
deepcopy函数增加了一个名为memo的参数,更多信息请参考Python: Numpy deepcopy TypeError - hpaulj
2个回答

2

numpy.copy 允许通过 order 参数更好地控制结果的内存布局,并且它始终生成一个数组,即使给定其他类似于数组的对象。此外,您无需单独导入 copy 模块。


但是,导入copy除了额外的代码行之外,是否有任何副作用? - dkv

2

是的,存在副作用,并且对于float64类型,numpy代码比纯python快约20%。

In [1]: import numpy as np

In [2]: from copy import copy

In [3]: arr = np.random.rand(10000, 10000)

In [4]: %timeit copy(arr)
535 ms ± 97.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [5]: %timeit np.copy(arr)
453 ms ± 19.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [6]: %timeit arr.copy()
456 ms ± 22 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接