用于两个矩阵相乘的 Python 程序

要理解这个例子,你应该具备以下 Python 编程 主题的知识


在 Python 中,我们可以将矩阵实现为嵌套列表(列表中的列表)。

我们可以将每个元素视为矩阵的一行。

例如 X = [[1, 2], [4, 5], [3, 6]] 将表示一个 3x2 的矩阵。

第一行可以选择为 X[0]。并且,第一行第一列的元素可以选择为 X[0][0]

两个矩阵 XY 的乘法仅在 X 的列数等于 Y 的行数时才有定义。

如果 X 是一个 n x m 矩阵,Y 是一个 m x l 矩阵,那么 XY 是有定义的,并且维度为 n x l(但 YX 是没有定义的)。这里有几种在 Python 中实现矩阵乘法的方法。

源代码:使用嵌套循环进行矩阵乘法

# Program to multiply two matrices using nested loops

# 3x3 matrix
X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
# 3x4 matrix
Y = [[5,8,1,2],
    [6,7,3,0],
    [4,5,9,1]]
# result is 3x4
result = [[0,0,0,0],
         [0,0,0,0],
         [0,0,0,0]]

# iterate through rows of X
for i in range(len(X)):
   # iterate through columns of Y
   for j in range(len(Y[0])):
       # iterate through rows of Y
       for k in range(len(Y)):
           result[i][j] += X[i][k] * Y[k][j]

for r in result:
   print(r)

输出

[114, 160, 60, 27]
[74, 97, 73, 14]
[119, 157, 112, 23]

在这个程序中,我们使用了嵌套的 for 循环来遍历每一行和每一列。我们在结果中累加乘积的和。

这种技术很简单,但随着矩阵阶数的增加,计算成本会很高。

对于更大的矩阵运算,我们推荐使用优化的软件包,如 NumPy,它比上面的代码快上几倍(大约 1000 倍)。

源代码:使用嵌套列表推导式进行矩阵乘法

# Program to multiply two matrices using list comprehension

# 3x3 matrix
X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]

# 3x4 matrix
Y = [[5,8,1,2],
    [6,7,3,0],
    [4,5,9,1]]

# result is 3x4
result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X]

for r in result:
   print(r)

这个程序的输出与上面相同。要理解上面的代码,我们必须首先了解内置函数 zip() 和使用 * 运算符进行解包参数列表

我们使用嵌套列表推导式来遍历矩阵中的每个元素。起初,代码看起来复杂且难以阅读。但一旦你掌握了列表推导式,你可能就不会再回到嵌套循环了。

要了解更多信息,请访问 Python 列表推导式


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战