为了账号安全,请及时绑定邮箱和手机立即绑定

Python中的'@ ='符号是什么?

Python中的'@ ='符号是什么?

隔江千里 2019-10-18 10:05:45
我知道@是给装饰器用的,但是@=Python有什么用呢?它只是保留一些未来的想法吗?这只是我阅读时的许多问题之一tokenizer.py。
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

@=而@在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用于ndarray的矩阵乘法


@运算符的引入使涉及矩阵乘法的代码更易于阅读。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)

显然,最后一种实现更易于阅读和解释为等式。


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 2099 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信