问题描述
我在 Python 3.x 中找到了矩阵乘法的代码,但我无法理解列表推导在下面的代码中是如何工作的。
# Program to multiply two matrices using list comprehension
# 3x3 matrix
X = [[12,7,3],[4,5,6],[7,8,9]]
# 3x4 matrix
Y = [[5,1,2],[6,3,0],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)
解决方法
@Santosh,从纯粹的 List Comprehension
方式可能更容易理解这个 loop
,如下所示:
# 3x3 matrix
X = [[12,7,3],[4,5,6],[7,8,9]]
# 3x4 matrix
Y = [[5,1,2],[6,3,0],9,1]]
# result is 3x4
result = [[0,[0,0]]
# iterate through rows of X
for r in range(len(X)):
# iterate through columns of Y
for c in range(len(Y[0])):
# iterate through rows of Y
for k in range(len(Y)):
result[r][c] += X[r][k] * Y[k][c]
print(result)
那你猜。可以找到与 List Comprehension 版本的相似之处,几乎不需要重新格式化:
def matrix_mul(X,Y):
zip_b = list(zip(*Y))
return [[sum(a * b for a,b in zip(row_a,col_b))
for col_b in zip_b]
for row_a in X]