[英]In python, does `@=` act on the left or the right?
在我看來很明顯vector @= matrix
應該意味着vector = matrix @ vector
,這與大多數其他二元運算符的做法相反。 不幸的是, PEP 465中完全省略了對此的任何討論; 它僅說明@
運算符是左關聯的,並且@=
運算符對應於__imatmul__
function。
據推測,覆蓋意味着數值庫可以根據需要選擇這種行為,但這留下了三個密切相關的問題:
__imatmul__
沒有明確提供,但__matmul__
和__rmatmul__
是,默認行為是什么? 與任何其他增強賦值運算符一樣, x @= y
是x = x @ y
的就地如果x
支持它的版本。
x = y @ x
對您來說似乎很明顯,但我認為除了x = x @ y
之外沒有其他任何東西被認為是一個嚴肅的選擇,而且我認為任何主要的數學庫都沒有實現像您期望的那樣的東西. sympy.Matrix
將其實現為x = x @ y
(非可變,無__imatmul__
),並且numpy.ndarray
說“TypeError:不(尚)支持就地矩陣乘法。使用 'a = a @ b' 而不是'a @= b'。” (或者可能在以后的版本中支持)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.