在我看来,很明显,vector @= matrix的意思应该是vector = matrix @ vector,与大多数其他二进制运算符的做法相反。不幸的是,佩普465完全忽略了对此的任何讨论;它只说明@运算符是左关联的,而@=运算符对应于__imatmul__函数。
据推测,覆盖意味着如果数字库愿意,可以选择这种行为,但这就留下了三个密切相关的问题:
__imatmul__,但是提供了__matmul__和__rmatmul__,那么默认行为是什么?发布于 2022-01-01 20:12:34
与任何其他增广赋值操作符一样,x @= y是一个就地-如果-x-支持的x = x @ y的版本。
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不强制数组为2D,因此NumPy中最常见的矢量表示形式是一维数组,而不是列向量。在“向量@矩阵”操作中,一维数组的行为将类似于行向量,尽管结果将是一维而不是行向量。
https://stackoverflow.com/questions/70551521
复制相似问题