重用一个现有的numpy数组或创建一个新数组?

时间:2016-06-02 07:48:41

标签: python performance numpy

在迭代算法中,通常多次使用大型numpy数组。我想将值填充到一个大的现有numpy数组中,但我发现创建一个新数组甚至更快。

>>>import numpy as np
>>>a=np.arange(10000)
>>>b=a.copy()
>>>%timeit b=a+a   # Every time create a new array
100000 loops, best of 3: 9.59 µs per loop
>>>%timeit b[:]=a+a  # Use existing array
100000 loops, best of 3: 13.3 µs per loop
>>>%timeit np.copyto(b,a+a)  # Another way to use existing array
100000 loops, best of 3: 13.4 µs per loop
  • 如果有更快的方法重用现有阵列? (例如,上面b
  • 如果没有这种方式,为什么创建新阵列更快?
  • 每次重新创建一个新阵列有什么缺点吗?我对此犹豫不决,因为我的数据很大,我需要在每次迭代中为它分配不同的值。

1 个答案:

答案 0 :(得分:3)

  • np.copyto(b,a);b+=a更快,但不是最快的方式。
  • np.add(a,a,b)是现在的最佳选择,100000个循环,最佳3:每循环8.66μs。

也许b[:]=a+a会创建一些临时计算空间?我不知道。但是使用“+ =, - =,* =,添加”这些ufuns不会出错。