在使用浅复制时,是否有情况需要使用NumPy的np.copy()
而不是Python的copy.copy()
方法?据我所知,两者都可以创建浅复制,但NumPy仅限于数组。是否有任何性能或特殊处理由NumPy完成而未被copy
考虑到的情况?
numpy.copy
允许通过 order
参数更好地控制结果的内存布局,并且它始终生成一个数组,即使给定其他类似于数组的对象。此外,您无需单独导入 copy
模块。
copy
除了额外的代码行之外,是否有任何副作用? - dkv是的,存在副作用,并且对于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)
copy
即可使用copy
。 - cs95copy.copy
只是在可能的情况下将操作委托给对象自己的复制方法。实际上,您可以自己阅读copy.copy
代码。arr.__copy__
是一个方法。np.copy
也是Python代码。 - hpauljarr.copy()
。 - hpauljdeepcopy
函数增加了一个名为memo
的参数,更多信息请参考Python: Numpy deepcopy TypeError。 - hpaulj