numpy矩阵乘法中的multiply,matmul和dot的使用

作者:木盏 时间:2023-10-22 23:58:56 

用numpy做矩阵运算时,少不了用到矩阵乘法。本文帮你迅速区分multiply, matmul和dot的区别。

numpy官方文档中的说明:(想深入了解可以一戳)

multiply: https://docs.scipy.org/doc/numpy/reference/generated/numpy.multiply.html

dot: https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html

matmul:https://docs.scipy.org/doc/numpy/reference/generated/numpy.matmul.html

1. multiply(矩阵点乘)

先说说更简单的multiply,如果两个维度完全一样的矩阵用multiply做乘法,那么它们只是进行对应位置元素之间的乘法,得到一个同样维度的矩阵输出。这就是所谓的element-wise product。

import numpy as np
a = np.array([[0,1,2], [1,2,3], [3,4,5]])
b = np.array([[1,1,2], [2,2,1], [1,1,2]])
print(np.multiply(a, b))

输出:

array([[ 0, 1, 4], [ 2, 4, 3], [ 3, 4, 10]])

看这个栗子,应该十分好理解multiply。但是,如果你认为multiply只能对同样维度的矩阵之间相乘,那你就 t/o-o\ simple了。

如果3x3的矩阵和3x1的矩阵用multiply相乘会怎样呢?继续看栗子:

import numpy as np
a = np.array([[0, 1, 2], [1, 2, 3], [3, 4, 5]])
b = np.array([1, 2, 3])
print(np.multiply(a, b))

输出:

array([[ 0,  2,  6],
       [ 1,  4,  9],
       [ 3,  8, 15]])

相当于用b依次乘以a的每一行。记住,multiply是满 * 换律的。(a和b互换位置结果不变)

对于3x3的矩阵a,可以用3x1的矩阵与它相乘,也可以用1x3的矩阵与它相乘。还可以用它乘以一个常数:

import numpy as np
a = np.array([[0, 1, 2], [1, 2, 3], [3, 4, 5]])
print(np.multiply(a, 3))

相当于a中各个元素乘以3。

2. dot(矩阵叉乘)

dot就是矩阵叉乘,MxN矩阵乘以NxC矩阵会得到一个MxC的矩阵。对于2D情况下的dot,等同于matmul,也等同于运算符@。

用一张图很好解释:

numpy矩阵乘法中的multiply,matmul和dot的使用

>>> a = [[1, 0], [0, 1]]
>>> b = [[4, 1], [2, 2]]
>>> np.dot(a, b)
array([[4, 1],
      [2, 2]])
>>> a@b
array([[4, 1],
      [2, 2]])

3. matmul

matmul不支持标量乘法,在2D矩阵乘法中,其效果与dot一样。

在N维矩阵乘法中(N>=3),体现出与dot不一样的算法。

>>> a = np.ones([9, 5, 7, 4])
>>> c = np.ones([9, 5, 4, 3])
>>> np.dot(a, c).shape
(9, 5, 7, 9, 5, 3)
>>> np.matmul(a, c).shape
(9, 5, 7, 3)
>>> # n is 7, k is 4, m is 3

来源:https://muzhan.blog.csdn.net/article/details/104437487?

标签:numpy,矩阵乘法
0
投稿

猜你喜欢

  • pandas DataFrame的修改方法(值、列、索引)

    2021-10-17 11:35:10
  • 详解python数据结构和算法

    2021-06-21 13:48:19
  • 如何利用Python打开txt格式的文件

    2022-06-01 02:08:36
  • 利用Django框架中select_related和prefetch_related函数对数据库查询优化

    2024-01-20 23:24:19
  • Python实现的远程登录windows系统功能示例

    2022-10-09 21:26:15
  • 详解Go语言中切片的长度与容量的区别

    2024-04-25 15:05:32
  • Python实现双X轴双Y轴绘图的示例详解

    2021-10-17 17:33:58
  • Python3离线安装Requests模块问题

    2021-05-06 09:58:24
  • python爬取各省降水量及可视化详解

    2023-08-04 15:19:57
  • 详解ABP框架中的数据过滤器与数据传输对象的使用

    2024-05-02 17:19:47
  • 关于浏览器地址栏的小图标favicon.ico制作

    2010-03-07 15:57:00
  • 对MySQL几种联合查询的通俗解释

    2024-01-18 17:44:40
  • 用javascript做拖动层布局的思路

    2008-05-30 13:38:00
  • python和node.js生成当前时间戳的示例

    2022-05-26 05:07:43
  • Mysql存储引擎MyISAM的常见问题(表损坏、无法访问、磁盘空间不足)

    2024-01-14 22:07:53
  • css实现简单圆角效果

    2008-11-27 13:11:00
  • 浅谈如何提高PHP代码的质量

    2024-06-05 09:47:05
  • 关于pymysql模块的使用以及代码详解

    2024-01-23 04:16:26
  • Python3 sys.argv[ ]用法详解

    2021-08-03 00:16:29
  • Python Handler处理器和自定义Opener原理详解

    2022-05-15 10:57:48
  • asp之家 网络编程 m.aspxhome.com