47 lines
2.1 KiB
Markdown
47 lines
2.1 KiB
Markdown
|
|
# 如何在 Python 中实现矩阵相乘
|
|||
|
|
|
|||
|
|
> 原文:<https://www.pythoncentral.io/multiply-matrices-python/>
|
|||
|
|
|
|||
|
|
在 Python 和大多数其他 OOP 编程语言中,将两个数相乘是一个非常简单的过程。然而,当你试图将两个矩阵相乘时,事情就变得有点复杂了。如你所知,矩阵基本上就是一个嵌套列表,或者是另一个列表中的多个列表。使用矩阵时,主列表中的每个列表都可以视为一行,行中的每个值都可以视为一列。矩阵可能是这样的:
|
|||
|
|
|
|||
|
|
```py
|
|||
|
|
x = [[4, 3], [88, 7], [56, 31]]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
上例中的矩阵有三行,每行有两列。
|
|||
|
|
|
|||
|
|
如果你想将两个矩阵(x 和 y)相乘,你需要确保 x 中的列数等于 y 中的行数,否则这个等式将无法正常工作。出于本教程的考虑,让我们将两个各有三行、三列的矩阵相乘,即 3x3 矩阵。请记住,当您将两个矩阵相乘时,得到的矩阵的列数将与等式中最大的矩阵的列数一样多,因此,例如,如果您将 3×3 乘以 3×4,得到的矩阵将是 3×4。
|
|||
|
|
|
|||
|
|
出于本教程的目的,我们将 3x3 乘以 3x3。让我们看看下面的例子,看看它是如何工作的:
|
|||
|
|
|
|||
|
|
```py
|
|||
|
|
X = [[34,1,77],
|
|||
|
|
[2,14,8],
|
|||
|
|
[3 ,17,11]]
|
|||
|
|
|
|||
|
|
Y = [[6,8,1],
|
|||
|
|
[9,27,5],
|
|||
|
|
[2,43,31]]
|
|||
|
|
|
|||
|
|
result = [[0,0,0],
|
|||
|
|
[0,0,0],
|
|||
|
|
[0,0,0]]
|
|||
|
|
|
|||
|
|
for i in range(len(X)):
|
|||
|
|
for j in range(len(Y[0])):
|
|||
|
|
for k in range(len(Y)):
|
|||
|
|
result[i][j] += X[i][k] * Y[k][j]
|
|||
|
|
|
|||
|
|
for r in result:
|
|||
|
|
print(r)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
在上面的例子中,我们首先要定义我们的矩阵。然后,我们需要定义一个结果矩阵,它将表示包含我们方程的答案的矩阵。因为我们的两个矩阵是 3x3,所以我们的结果矩阵也是 3x3。接下来,我们遍历 x 矩阵的行,然后是 y 矩阵的列(这是使用 y[0]完成的),最后遍历 y 矩阵的行。然后执行算术运算。
|
|||
|
|
|
|||
|
|
上面示例的输出如下所示:
|
|||
|
|
|
|||
|
|
```py
|
|||
|
|
r =[[367, 3610, 2428], [154, 738, 320], [193, 956, 429]]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这些基本信息应该足以让你自己开始学习矩阵乘法。一旦你掌握了像矩阵一样的乘法,一定要挑战自己,尝试那些列数和行数不相等的乘法。
|