Python 中的 '@=' 符号代表什么?
- 2025-02-18 09:23:00
- admin 原创
- 40
问题描述:
我知道@
for 是装饰器,但是@=
Python 中的 for 是什么?它只是为某些未来的想法保留的吗?
这只是我在阅读时提出众多问题之一tokenizer.py
。
解决方案 1:
来自文档 :
(at) 运算符
@
旨在用于矩阵乘法。没有内置 Python 类型实现此运算符。
该@
运算符是在 Python 3.5 中引入的。@=
正如您所期望的那样,它是矩阵乘法,然后是赋值。它们映射到__matmul__
,__rmatmul__
或__imatmul__
类似于+
和+=
映射到__add__
,__radd__
或__iadd__
。
PEP 465中详细讨论了该运算符及其背后的原理。
解决方案 2:
@=
和@
是 Python 3.5中引入的执行矩阵乘法的新运算符。它们旨在澄清迄今为止存在的混淆,即该运算*
符用于元素乘法或矩阵乘法,具体取决于特定库/代码中采用的约定。因此,将来,该运算符*
仅用于元素乘法。
如PEP0465中所述,引入了两个运算符:
一个新的二元运算符
A @ B
,用法类似A * B
就地版本
A @= B
,用法类似A *= B
矩阵乘法与元素乘法
为了快速突出差异,对于两个矩阵:
A = [[1, 2], B = [[11, 12],
[3, 4]] [13, 14]]
元素乘法将产生:
A * B = [[1 * 11, 2 * 12],
[3 * 13, 4 * 14]]
矩阵乘法将产生:
A @ B = [[1 * 11 + 2 * 13, 1 * 12 + 2 * 14],
[3 * 11 + 4 * 13, 3 * 12 + 4 * 14]]
在 Numpy 中的用法
到目前为止,Numpy 使用以下约定:
该
*
运算符(以及一般的算术运算符)被定义为ndarrays上的元素运算和numpy.matrix类型上的矩阵乘法。方法/函数
dot
用于 ndarrays 的矩阵乘法
运算符的引入@
使得涉及矩阵乘法的代码更易于阅读。PEP0465 给出了一个例子:
# Current implementation of matrix multiplications using dot function
S = np.dot((np.dot(H, beta) - r).T,
np.dot(inv(np.dot(np.dot(H, V), H.T)), np.dot(H, beta) - r))
# Current implementation of matrix multiplications using dot method
S = (H.dot(beta) - r).T.dot(inv(H.dot(V).dot(H.T))).dot(H.dot(beta) - r)
# Using the @ operator instead
S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)
显然,最后的实现作为一个方程式更容易阅读和解释。
解决方案 3:
@ 是 Python3.5 中新增的矩阵乘法运算符
参考:https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465
例子
C = A @ B
解决方案 4:
Numpy 1.25 将支持使用@=
如下矩阵乘法:
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)