【问题标题】:Reuse an exisiting numpy array or create a new one?重用现有的 numpy 数组还是创建一个新数组?
【发布时间】:2016-06-02 20:06:05
【问题描述】:

在迭代算法中,通常会多次使用大型 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
  • 如果没有这样的方法,为什么创建一个新数组会更快?
  • 每次都重新创建一个新数组有什么缺点吗?我对此犹豫不决,因为我的数据很大,我需要在每次迭代中为其分配不同的值。

【问题讨论】:

  • 我相信结果可以通过以下事实来解释:当您执行 b[:]=a+a 时,它首先计算 a+a 并将其放入一个数组中,然后将该数组分配给 b 中的内存。跨度>

标签: python performance numpy


【解决方案1】:
  • np.copyto(b,a);b+=a 更快,但不是最快的方式。
  • np.add(a,a,b) 是目前的最佳选择,100000 次循环,3 次中的最佳选择:每个循环 8.66 µs。

也许b[:]=a+a 会生成一些临时计算空间?我不知道。但是使用"+=, -=, *=, add"这些ufun不会错。

【讨论】:

    猜你喜欢
    • 2017-12-30
    • 2018-12-19
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2021-03-09
    • 2021-12-14
    相关资源
    最近更新 更多