gpt4 book ai didi

python - - vs -= 运算符与 numpy

转载 作者:太空狗 更新时间:2023-10-29 17:22:08 29 4
gpt4 key购买 nike

我的 python 代码中有一些与 --= 相关的奇怪行为。我正在使用 numpy 编写 QR 分解,并在双循环中包含以下代码行:

v = v - r[i,j] * q[:,i]

其中qr都是numpy.arrayv是另一个的一部分>numpy.array 取为 v = x[:,j]

上述代码并非在所有情况下都按预期工作。但是,如果我进行以下更改:

v -= r[i,j] * q[:,i]

然后一切都完美无缺。

我的印象是这两行应该是相同的。为了测试 -=_ = _ - 是否工作不同,我创建了以下片段

import numpy

x = numpy.array(range(0,6))
y = numpy.array(range(0,6))

u = x[3:5]
v = y[3:5]

print u,v

u = u - [1,1]
v -= [1,1]

print u,v

再次按预期工作,在两个打印语句中生成 [2 3] [2 3]

所以我完全不明白为什么这两条线的表现不同。我能想到的唯一可能的事情是,我有时会处理极小的数字(大约 10^-8 或更小)并且 -= 更擅长一些精度问题?随着 x 的元素变小,第一行的性能越来越差。

如果有其他类似问题的帖子,我很抱歉,我无法搜索 --= ,我不知道是否有任何正确的条款对于除赋值/运算符之外的这些。

感谢您的帮助!

最佳答案

v 是切片时,v -= Xv = v - X 会产生截然不同的结果。考虑

>>> x = np.arange(6)
>>> v = x[1:4]
>>> v -= 1
>>> v
array([0, 1, 2])
>>> x
array([0, 0, 1, 2, 4, 5])

其中 v -= 1 更新切片,因此更新它查看的数组,就地,对比

>>> x = np.arange(6)
>>> v = x[1:4]
>>> v = v - 1
>>> v
array([0, 1, 2])
>>> x
array([0, 1, 2, 3, 4, 5])

其中 v = v - 1 重置变量 vx 保持不变。要在没有 -= 的情况下获得前一个结果,您必须这样做

v[:] = v - 1

关于python - - vs -= 运算符与 numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047111/

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