Python编写的两个矩阵相乘的代码
在这个例子中,我们将学习使用两种不同的方法来乘法矩阵:嵌套循环和嵌套列表理解
要理解此示例,您应该了解以下Python 编程主题:
Python for 循环
Python 列表
Python 矩阵和 NumPy 数组
在 Python 中,我们可以将矩阵实现为嵌套列表(列表中的列表)。
我们可以将每个元素视为矩阵的一行。
例如X = [[1, 2], [4, 5], [3, 6]]表示一个3x2矩阵。
第一行可以选择为X[0]。并且,第一行第一列的元素可以选择为X[0][0]。
仅当X的列数等于Y的行数,两个矩阵才能进行乘法操作。
如果X是一个n x m矩阵并且是那么是一个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()和使用 * 运算符解包参数列表。
程序使用嵌套列表推导来遍历矩阵中的每个元素。代码起初看起来很复杂且不可读。但是一旦你掌握了列表推导的窍门,你可能就不会再回到嵌套循环了。
相关文章