Python 基础教程

Python 流程控制

Python 函数

Python 数据类型

Python 文件操作

Python 对象和类

Python 日期和时间

Python 高级知识

Python 参考手册

Python 程序将两个矩阵相乘

Python 实例大全

在此示例中,我们将学习使用两种不同的方法来乘法矩阵:嵌套循环和嵌套列表理解

要理解此示例,您应该了解以下Python编程主题:

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

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

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

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

仅当X的列数等于Y的行数时,才定义两个矩阵X和Y的乘法。

如果X是一个n X m矩阵,Y是一个m X l矩阵,那么XY是有定义的,它的维数是n X l(但YX没有定义)。下面是在Python中实现矩阵乘法的几种方法。

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

# 程序使用嵌套循环将两个矩阵相乘

# 3x3 matrix
X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
# 3x4 矩阵
Y = [[5,8,1,2],
    [6,7,3,0],
    [4,5,9,1]]
# 结果是 3x4
result = [[0,0,0,0],
         [0,0,0,0],
         [0,0,0,0]]

# 遍历X行
for i in range(len(X)):
   # 遍历Y列
   for j in range(len(Y[0])):
       # 遍历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倍)。

源代码:使用嵌套列表理解的矩阵乘法

# 程序乘两个矩阵使用列表理解

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

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

# 结果是 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 实例大全