gpt4 book ai didi

python - 为什么添加和分配 (+=) 与 numpy.ndarrays 行为异常?

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:48 27 4
gpt4 key购买 nike

考虑以下 Python 代码:

import numpy

a = numpy.random.rand(3,4)
b = numpy.random.rand(3,4)

c = a
c += b

c/2. - (a + b)/2.

最后一行的结果不是零数组。但是,如果我这样做:

d = a
d = d + b

d/2. - (a + b)/2.

那么结果就是0,符合预期。这对我来说很奇怪,有人可以解释这种行为吗?对 numpy 数组使用 +=,/=, ... 是否明智?谢谢!

(这只是一个最小的例子,我必须把几个数组加起来。)

最佳答案

操作+=就位。这意味着它会在您的第一个示例中更改数组 a 的内容!

操作c=a 使c 指向与a 完全相同的数据。执行 c += b 还会将 b 添加到 a

操作d = a 也使d 指向a。但是 d = d + b 将内存中的一个新位置分配给 d + b,然后将 d 引用到这个新位置。

如您所见,差异非常重要!对于许多算法,您可以利用这些属性中的任何一个来提高效率,但始终需要谨慎。

参见 here教程和 here对于一个深入的 SO 问题。

关于python - 为什么添加和分配 (+=) 与 numpy.ndarrays 行为异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26628878/

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