📅  最后修改于: 2020-09-21 02:21:13             🧑  作者: Mango
在Python,我们可以将矩阵实现为嵌套列表(列表内的列表)。
我们可以将每个元素视为矩阵的一行。
例如, X = [[1, 2], [4, 5], [3, 6]]
表示3x2
矩阵。
第一行可以选择为X[0]
。并且,可以将第一行第一列中的元素选择为X[0][0]
。
仅当X
的列数等于行Y
才定义两个矩阵X
和Y
乘法。
如果X
是nxm
矩阵,而Y
是mxl
矩阵,则定义XY
并具有尺寸nxl
(但未定义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()
和使用* 运算符解zip()
参数列表。
我们使用嵌套列表理解来遍历矩阵中的每个元素。该代码起初看起来很复杂且不可读。但是一旦掌握了列表推导的技巧,您可能就不会回到嵌套循环了。