我们在看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是一样的,如下图所示:

在这里插入图片描述
  只是当引入了@运算符后,我们可以直接简单使用@运算符来实现矩阵乘法了。还一点需要注意的是,在numpy的矩阵乘法中,默认的乘法是不对第一个维度进行操作的,这点也可以从上面的结果中看出(输出结果的第一维都一样)。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐