Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python deepcopy()与仅仅启动一个numpy数组的运行时速度相比?_Python_Arrays_Numpy_Copy_Deep Copy - Fatal编程技术网

Python deepcopy()与仅仅启动一个numpy数组的运行时速度相比?

Python deepcopy()与仅仅启动一个numpy数组的运行时速度相比?,python,arrays,numpy,copy,deep-copy,Python,Arrays,Numpy,Copy,Deep Copy,我很好奇 elevation_arr = numpy.zeros([900, 1600], numpy.float32) climate_arr = copy.deepcopy(elevation_arr) rainfall_arr = copy.deepcopy(elevation_arr) 执行速度比 elevation_arr = numpy.zeros([900, 1600], numpy.float32) climate_arr = numpy.zeros([900, 1600],

我很好奇

elevation_arr = numpy.zeros([900, 1600], numpy.float32)
climate_arr = copy.deepcopy(elevation_arr)
rainfall_arr = copy.deepcopy(elevation_arr)
执行速度比

elevation_arr = numpy.zeros([900, 1600], numpy.float32)
climate_arr = numpy.zeros([900, 1600], numpy.float32)
rainfall_arr = numpy.zeros([900, 1600], numpy.float32)

numpy_zeros
对于较小的阵列性能稍好,对于较大的阵列性能更好,如下所示

import copy
import numpy as np

def deep_copy():
    elevation_arr = np.zeros([900, 1600], np.float32)
    climate_arr = copy.deepcopy(elevation_arr)
    rainfall_arr = copy.deepcopy(elevation_arr)
    return 

def numpy_zeros():
    elevation_arr = np.zeros([900, 1600], np.float32)
    climate_arr = np.zeros([900, 1600], np.float32)
    rainfall_arr = np.zeros([900, 1600], np.float32)
    return

%timeit deep_copy()
# 4.13 ms ± 585 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit numpy_zeros()
# 3.01 ms ± 195 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
对于10000 x 10000阵列,以下是计时<代码>numpy_零的性能优于

%timeit deep_copy()
# 569 ms ± 50 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit numpy_zeros()
# 15.6 µs ± 1.38 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

我不知道你能为这样的事情计时,谢谢。使用
copy..deepcopy()
有什么特别的原因吗?我认为
elevation\u arr.copy()
无论如何都等同于深度复制,因为
elevation\u arr
的元素是不可变的int。@fountainhead我想确保这些值不会是引用。我不知道不可变的值会这样工作。它们在技术上是浮动的,不是吗?没错,它们是
float32s
。但是不可变,就像
ints
一样。我的观点是,给定一个由许多对象组成的聚合数据结构(在本例中为numpy数组),如果聚合中的对象都是不可变的,那么浅层副本就足够了。只有当对象是可变的时,通过复制元素本身,使副本成为深层副本才变得重要。@fountainhead哦,我明白了。谢谢我不知道。对于像你这样的数组:
copy.copy(arr)
copy.deepcopy(arr)
arr.copy()
np.array(arr,copy=True)
deepcopy
只有在数组具有对象数据类型(与列表包含列表或字典时相同)时才会显著不同。