gpt4 book ai didi

python - 返回新数组和修改传入数组的性能

转载 作者:太空宇宙 更新时间:2023-11-03 18:06:43 25 4
gpt4 key购买 nike

[Related ]

在下面的快照中,我比较了

的速度
  • 通过切片赋值修改现有数组
  • 仅返回一个新的、修改过的数组

看来后者更快。为什么会这样?

<小时/>

编辑:更新了建议,以及使用 numpy 的矢量化 add() 的版本,这是现在最快的。

enter image description here

最佳答案

我对 python/numpy 内部结构了解不多,但我假设正在发生以下情况。仅通过查看代码,我得到的印象是 finline所做的工作比 freturn 更多,自 finline具有 freturn 的所有陈述确实( x + 1.0 )等等。

也许这可以解释发生了什么:

>>> x = np.random.rand(N)
>>> y = np.zeros(N)
>>> super(np.ndarray, y).__repr__()
Out[33]: '<numpy.ndarray object at 0x24c9c80>'
>>> finline(x, y)
>>> y # see that y was modified
Out[35]:
array([ 1.92772158, 1.47729293, 1.96549695, ..., 1.37821499,
1.8672971 , 1.17013856])
>>> super(np.ndarray, y).__repr__()
Out[36]: '<numpy.ndarray object at 0x24c9c80>' # address of y did not change
>>> y = freturn(x)
>>> super(np.ndarray, y).__repr__()
Out[38]: '<numpy.ndarray object at 0x24c9fc0>' # address of y changed

本质上,我认为 finline正在做更多的工作,因为它必须迭代 y 的元素并将每个元素初始化为 x + 1.0 返回的数组手术。另一方面,y = freturn(x)可能只是重新初始化 y 的值指针等于 x + 1.0 初始化的数组的地址操作。

关于python - 返回新数组和修改传入数组的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26746707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com