学习笔记(25):线性代数,矩阵-矩阵乘法原理
学习笔记(25):线性代数,矩阵-矩阵乘法原理
1、代码
import torch
A = torch.arange(20).reshape(5, 4)
print(A)
A = A.to(torch.float32) # 或使用A.float()B = torch.ones(4, 3)
print(B)
print(torch.mm(A, B))
2、执行结果
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]])
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
tensor([[ 6., 6., 6.],
[22., 22., 22.],
[38., 38., 38.],
[54., 54., 54.],
[70., 70., 70.]])
计算原理解释:
要计算 torch.mm(A, B)
(矩阵乘法),需要确保 A 的列数等于 B 的行数。在你的例子中:
- A 是一个 5×4 的矩阵(5 行 4 列)。
- B 是一个 4×3 的矩阵(4 行 3 列)。
由于 A 的列数(4)等于 B 的行数(4),因此可以进行矩阵乘法,结果将是一个 5×3 的矩阵。
矩阵乘法原理
矩阵乘法 C = A × B
的计算规则是:
- C 的行数等于 A 的行数(5 行)。
- C 的列数等于 B 的列数(3 列)。
- C 中每个元素
C[i,j]
等于 A 的第 i 行与 B 的第 j 列对应元素的乘积之和。
计算步骤示例
以结果矩阵 C
的第一行第一列元素 C[0,0]
为例:
- 取 A 的第 0 行:
[0, 1, 2, 3]
- 取 B 的第 0 列:
[1., 1., 1., 1.]
- 对应元素相乘后求和:\((0 \times 1) + (1 \times 1) + (2 \times 1) + (3 \times 1) = 0 + 1 + 2 + 3 = 6\)
同理,计算其他元素:
C[0,1] = (0×1) + (1×1) + (2×1) + (3×1) = 6
C[0,2] = (0×1) + (1×1) + (2×1) + (3×1) = 6
- 以此类推,最终得到整个矩阵
C
。
A=tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]])
B=tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])结果:
tensor([[ 6., 6., 6.],
[22., 22., 22.],
[38., 38., 38.],
[54., 54., 54.],
[70., 70., 70.]])
验证方法
由于 B 的所有元素都是 1,因此结果矩阵 C 的每个元素 C[i,j]
实际上等于 A 的第 i 行的所有元素之和。例如:
- A 的第 0 行和为
0+1+2+3=6
,对应 C [0,:] 的所有元素。 - A 的第 1 行和为
4+5+6+7=22
,对应 C [1,:] 的所有元素。 - 以此类推。