题解 | #矩阵乘法#
矩阵乘法
https://www.nowcoder.com/practice/ebe941260f8c4210aa8c17e99cbc663b
正确代码:
import sys
input_data = sys.stdin.read().split()
data_iter = iter(map(int,input_data))
row1 = next(data_iter)
col1 = row2 = next(data_iter)
col2 = next(data_iter)
matrix1 = [[next(data_iter) for _ in range(col1)] for _ in range(row1)] # row1次读取,每次读取col1个数
matrix2 = [[next(data_iter) for _ in range(col2)] for _ in range(row2)]
res = [[0 for _ in range(col2)] for _ in range(row1)]
for i in range(len(res)):
for j in range(len(res[i])):
res[i][j] = sum((matrix1[i][k] * matrix2[k][j]) for k in range(col1))
for i in range(len(res)):
print(" ".join(list(map(str,res[i]))))
错误:
- 创建二维数组需要使用列表推导式
# 以创建一个元素全为0的m*n矩阵为例
matrix = [[0 for _ in range(n)] for _ in range(m)]
# [0 for _ in range(n)]即是一个长度为n的数组,表示矩阵的行
# 错误示范:
matrix = [[0] * n] * m
# 对列表应用*重复运算,不会创建列表的副本,而是创建了对同一个列表对象的应用,错误表现为列表每一行的元素相同:均为待输出正确列表的最后一行
改进:
使用生成器读取,节省内存