【发布时间】:2018-06-12 20:15:38
【问题描述】:
我想知道使用b = np.array(a) 而不是b = np.copy(a) 将Numpy 数组a 复制到b 中是否有任何缺点。当我%timeit 时,前者可以快 100%。
在这两种情况下b is a 是False,我可以操纵b 保持a 不变,所以我想这符合.copy() 的预期。
我错过了什么吗?使用np.array复制数组有什么不妥之处?
使用 python 3.6.5,numpy 1.14.2,而对于较大的尺寸,速度差异会迅速缩小:
a = np.arange(1000)
%timeit np.array(a)
501 ns ± 30.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit np.copy(a)
1.1 µs ± 35.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
【问题讨论】:
-
我看到速度差异消失了,实际上随着我增加数组的大小而逆转。他们与
numpy.arange(10000000)的工作差不多。 -
嗯,你是对的 - 但即使数组中有 1E9 个元素,差异也很小。相反,有几千个,
array比copy快得多。 -
这种比较的一个挑战是将函数调用开销与复制数据的实际工作分开。部分开销只是创建新数组的任务。
np.ones(a.shape,int)几乎与np.array(a)一样长。将copy时间与a+0之类的简单数学任务进行比较也可能会有所帮助。