numpy教程:numpy中矩阵乘法讲解并举例

在 Numpy 中,矩阵乘法(Matrix Multiplication)与普通的逐元素乘法不同,它遵循线性代数中的矩阵乘法规则,即 两个矩阵的相乘是行列之间的内积。Numpy 提供了多种方式来进行矩阵乘法,最常用的有:

  • dot() 或 np.dot():适用于一维、二维和更高维的矩阵乘法。
  • @ 操作符:从 Python 3.5 起支持,直接用于矩阵乘法。
  • matmul():专门用于矩阵乘法。

矩阵乘法规则:

假设我们有两个矩阵 ( A ) 和 ( B ),如果 ( A ) 是 ( m \times n ) 矩阵,( B ) 是 ( n \times p ) 矩阵,那么它们的乘积矩阵 ( C ) 的形状是 ( m \times p ),其中每个元素 ( C_{ij} ) 是 ( A ) 的第 ( i ) 行和 ( B ) 的第 ( j ) 列的内积。

1. 使用 dot() 进行矩阵乘法

python 复制代码
import numpy as np

# 定义两个矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# 矩阵乘法
C = np.dot(A, B)
print(C)

输出:

复制代码
[[19 22]
 [43 50]]
解释:
  • ( C0, 0 = 15 + 27 = 19 )
  • ( C0, 1 = 16 + 28 = 22 )
  • ( C1, 0 = 35 + 47 = 43 )
  • ( C1, 1 = 36 + 48 = 50 )

2. 使用 @ 操作符进行矩阵乘法

从 Python 3.5 起,可以直接使用 @ 操作符进行矩阵乘法。

python 复制代码
C = A @ B
print(C)

输出:

复制代码
[[19 22]
 [43 50]]

与 dot() 的输出相同。@ 是一种更简洁的矩阵乘法表示法,尤其是在链式矩阵乘法时。

3. 使用 matmul() 进行矩阵乘法

matmul() 函数专门用于矩阵乘法,与 dot() 不同,它只处理矩阵乘法,而 dot() 可以处理任意维度数组。

python 复制代码
C = np.matmul(A, B)
print(C)

输出:

复制代码
[[19 22]
 [43 50]]

4. 多维矩阵乘法

Numpy 支持高维矩阵的乘法运算。对于高维矩阵,矩阵乘法的计算规则扩展到沿着最后的轴进行。

python 复制代码
A = np.random.randint(1, 10, (2, 3, 4))
B = np.random.randint(1, 10, (2, 4, 5))

# 三维矩阵乘法,输出形状为 (2, 3, 5)
C = np.matmul(A, B)
print(C.shape)
print(C)

输出示例:

复制代码
(2, 3, 5)
[[[109 110  64  97  69]
  [115 124  74 107  83]
  [119 142  77 113 101]]

 [[113  95  72 101  78]
  [135 135 106 130 117]
  [122 106  82 105  94]]]

5. 矩阵与向量的乘法

矩阵乘法不仅适用于矩阵与矩阵,也适用于矩阵与向量之间的乘法。

python 复制代码
A = np.array([[1, 2, 3], [4, 5, 6]])
v = np.array([7, 8, 9])

# 矩阵与向量相乘
C = np.dot(A, v)
print(C)

输出:

复制代码
[ 50 122]
解释:
  • ( C0 = 17 + 28 + 3*9 = 50 )
  • ( C1 = 47 + 58 + 6*9 = 122 )

6. 逐元素乘法 vs 矩阵乘法

逐元素乘法是指矩阵中的对应元素逐一相乘,而不是矩阵乘法中的内积。

python 复制代码
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# 逐元素乘法(使用 * 操作符)
elementwise_mul = A * B
print(elementwise_mul)

输出:

复制代码
[[ 5 12]
 [21 32]]

在逐元素乘法中,每个位置的值是两个矩阵中相应位置元素的乘积:

  • ( A0,0 \times B0,0 = 1 \times 5 = 5 )
  • ( A0,1 \times B0,1 = 2 \times 6 = 12 )
  • ( A1,0 \times B1,0 = 3 \times 7 = 21 )
  • ( A1,1 \times B1,1 = 4 \times 8 = 32 )

总结:

  • 矩阵乘法 :使用 dot()、matmul() 或 @,遵循线性代数的矩阵内积规则。
  • 逐元素乘法 :使用 *,对应位置元素逐一相乘。
  • 广播机制:Numpy 广播机制允许不同维度的数组进行矩阵乘法。
相关推荐
reikocao5 小时前
IMU预积分误差模型推导:协方差传播、残差构建、雅可比矩阵
人工智能·线性代数·矩阵
TK泰妞10 小时前
TikTok 带货素材如何批量测试?从参考视频到内容矩阵的实操方法
线性代数·矩阵·音视频
学习论之费曼学习法13 小时前
无人值守AI内容矩阵实战(7):Playwright 发布器避坑——编辑器竞态、索引延迟与风控
python·线性代数·矩阵·编辑器·浏览器自动化·playwright·踩坑记录
惊鸿一博1 天前
Plücker直线_ 用两个三维向量描述一条空间直线
线性代数·算法·直线·几何表示
郝学胜-神的一滴2 天前
AI 编程智能体 09:零门槛调用教程
人工智能·数据分析·自动化·numpy·pandas·量化投资
zhuhai_xigedian2 天前
源网荷储一体化柜通信层:网络架构与协议矩阵设计
网络·矩阵·架构
I Am a robert girl3 天前
MeqMuon 源码级拆解:当优化器开始“配平”更新矩阵
深度学习·线性代数·矩阵·优化器·大模型预训练·muon·矩阵正交化
大雨歌3 天前
笛卡尔坐标 → 自然坐标(Frenet) 逐步推导全解 -5
线性代数
kaixin_啊啊4 天前
【零基础学AI】第 13 章——NumPy 和向量
人工智能·numpy
云的雨 雨的云4 天前
手写算法动画上位机:从排序到线性代数可视化
线性代数·算法