Python 重用现有的numpy数组还是创建一个新数组?

Python 重用现有的numpy数组还是创建一个新数组?,python,performance,numpy,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 >

在迭代算法中,通常会多次使用大型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
  • 如果没有这样的方法,为什么创建一个新阵列会更快
  • 每次重新创建一个新阵列有什么缺点吗?我对此犹豫不决,因为我的数据很大,我需要在每次迭代中为它分配不同的值
      • np.copyto(b,a);b+=a
        更快,但不是最快的方式
      • np.add(a,a,b)
        是目前最好的选择,100000个循环,每个循环最好3:8.66µs

      可能
      b[:]=a+a
      将生成一些临时计算空间?我不知道。但是使用“+=,-=,*=,add”这些UFUN不会错。

      我相信结果可以解释为这样一个事实:当你做
      b[:]=a+a时,它首先计算a+a并将其放入数组中,然后将该数组分配给b中的内存。