我在我的Python代碼中有一些奇怪的行爲,與-
和-=
相關。我正在寫使用numpy的QR分解,並有下面的代碼行的雙循環:- vs - =運算符與numpy
v = v - r[i,j] * q[:,i]
其中q
和r
都是numpy.array
,並v
是作爲v = x[:,j]
的另一numpy.array
片。
上述代碼在所有情況下都無法按預期工作。但是,如果我做了以下更改:
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
元素變小,第一行表現越來越差。
我很抱歉,如果有關於這個類似問題的任何其他帖子,我不能搜索-
和-=
,我不知道這些除了賦值/操作符之外是否有任何正確的術語。
感謝您的幫助!
爲了將來的參考,如果你想要搜索這樣的東西,'-'和' - ='的名字是['__sub__'] [1]和['__isub__'] [2]分別。所以: 'a = a-b'相當於'a = a .__ sub __(b)' 'a - = b'相當於'a .__ isub __(b)'。 (除非__isub__沒有定義,那麼它就會回到上面) [1]:http://pyref.infogami.com/__add__ [2]:http://pyref.infogami.com/__iadd__ – 2012-01-28 17:31:52