填充现有 numpy 数组和创建新数组之间的性能差异

Sea*_*sey 5 python numpy

在迭代算法中,多次使用大型 numpy 数组是很常见的。数组经常需要在每次迭代时手动“重置”。填充现有数组(使用 nans 或 0s)和创建新数组之间是否存在性能差异?如果是这样,为什么?

Dan*_*iel 6

答案取决于数组的大小。虽然分配新的内存区域需要几乎固定的时间,但填充该内存区域的时间随大小呈线性增长。但是,用 填充新分配的内存的numpy.zeros速度几乎是用 填充现有数组的两倍numpy.fill,比项设置快三倍x[:] = 0

因此,在我的机器上,用少于 800 个元素填充向量比创建新向量更快,用超过 800 个元素创建新向量更快。

  • 只有“zeros”有特殊的实现。“ones”是用“empty”和“fill(1)”实现的。 (4认同)
  • 丹尼尔,你知道为什么“numpy.zeros”对于更大的数组来说会更快吗?“numpy.ones”也会发生同样的情况吗?(顺便说一句,在我的系统上,一个 MBA i5 并使用 `np.float` 数组,我在数组大小为 20000 左右收支平衡。而且,对我来说,`numpy.ones` 总是比 `numpy.fill(1)` 慢,所以 `zeros()` 和 `fill(0)` 之间的收支平衡可能只发生在 0 中。) (2认同)