我们在看python程序时,经常可以看到@运算符和*运算符,其中@运算符在传统python中通常是作为装饰器使用的。但是在Python 3.5之后,它又具备了矩阵乘法运算的功能。下面使用示例来对比这两个运算符对矩阵运算的影响:
导入用到numpy包:
import numpy as np
创建一个维度为2×3×3的数组a,结果如下图所示:
a=np.arange(1,10).reshape(3,3)
a=np.expand_dims(a,0).repeat(2,0)
print(a)
再创建一个维度为2×3×3的数组b,结果如下图所示:
b=np.eye(3)
b=np.expand_dims(b,0).repeat(2,0)
print(b)
下面,我们执行a*b
,可以看到,输出为:
这表明,运算符*在矩阵运算中的功能是逐元素的乘法(称为Hadamard积(Hadamard product,数学符号⊙))。
下面,我们执行a@b
,可以看到,输出为:
这表明,运算符@在矩阵运算中的功能是矩阵乘法。也即,在矩阵乘法中,b矩阵右乘的作用是交换被乘矩阵的1、2两列,结果即是。其实@运算符和numpy的matmul是一样的,如下图所示:文章来源:https://uudwc.com/A/ABxkB
只是当引入了@运算符后,我们可以直接简单使用@运算符来实现矩阵乘法了。还一点需要注意的是,在numpy的矩阵乘法中,默认的乘法是不对第一个维度进行操作的,这点也可以从上面的结果中看出(输出结果的第一维都一样)。文章来源地址https://uudwc.com/A/ABxkB