在python中,`@=`作用在左边还是右边?

In python, does `@=` act on the left or the right?

对我来说很明显 vector @= matrix 应该表示 vector = matrix @ vector,这与大多数其他二元运算符的做法相反。不幸的是,PEP 465 完全省略了对此的任何讨论;它仅说明 @ 运算符是左关联的,并且 @= 运算符对应于 __imatmul__ 函数。

据推测,覆盖意味着数字库可以根据需要选择此行为,但这留下了三个密切相关的问题:

与任何其他增强赋值运算符一样,x @= yx = x @ y.

的就地-if-x-支持版本

x = y @ x 对你来说可能是显而易见的,但我认为除了 x = x @ y 之外没有其他任何东西被认为是一个严肃的选择,而且我认为没有任何主要的数学库已经实现任何像你期望的那样。 sympy.Matrix 将其实现为 x = x @ y(非可变,无 __imatmul__),numpy.ndarray 表示

TypeError: In-place matrix multiplication is not (yet) supported. Use 'a = a @ b' instead of 'a @= b'.

(使用 NumPy 1.19.5 和 1.21.5 进行检查)。

请注意,NumPy 为“向量@矩阵”操作定义了一个有用的含义。 NumPy 不强制数组是二维的,因此 NumPy 中最常见的向量表示是一维数组,而不是列向量。一维数组的行为类似于“向量@矩阵”操作中的行向量,但结果将是一维而不是行向量。