首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中,`@=`是在左边还是在右边?

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

Stack Overflow用户
提问于 2022-01-01 20:03:42
回答 1查看 50关注 0票数 1

在我看来,很明显,vector @= matrix的意思应该是vector = matrix @ vector,与大多数其他二进制运算符的做法相反。不幸的是,佩普465完全忽略了对此的任何讨论;它只说明@运算符是左关联的,而@=运算符对应于__imatmul__函数。

据推测,覆盖意味着如果数字库愿意,可以选择这种行为,但这就留下了三个密切相关的问题:

  • 如果没有显式提供__imatmul__,但是提供了__matmul____rmatmul__,那么默认行为是什么?
  • PEP作者的意图是什么?
  • 数字库(如numpy )选择了什么行为来实现?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
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中最常见的矢量表示形式是一维数组,而不是列向量。在“向量@矩阵”操作中,一维数组的行为将类似于行向量,尽管结果将是一维而不是行向量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70551521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档