编写N×N方阵相乘函数技术求助:实现矩阵乘法逻辑
方阵乘法函数实现详解
需求说明
编写一个函数,接收两个N×N的方阵(二维数组),返回它们的乘积,输入仅为方阵。
方阵乘法规则拆解
先拿2×2矩阵举例,假设矩阵A、B如下:
A = [[a00, a01], [a10, a11]] B = [[b00, b01], [b10, b11]]
乘积矩阵C的每个元素计算方式:
- C[0][0] = a00b00 + a01b10
- C[0][1] = a00b01 + a01b11
- C[1][0] = a10b00 + a11b10
- C[1][1] = a10b01 + a11b11
通用规则:对于结果矩阵C的任意位置C[n][m],需要取A的第n行所有元素,和B的第m列所有元素,将对应位置的元素相乘后全部求和,得到的值就是C[n][m]。
你的现有代码问题
你当前的代码只是遍历并打印了两个矩阵的所有元素,没有实现核心的乘法计算逻辑,接下来一步步完成这个函数:
实现步骤
- 确定矩阵尺寸:因为输入是N×N方阵,所以矩阵的边长
n = len(a)(a的行数就是N,每行的长度也等于N)。 - 初始化结果矩阵:创建一个n×n的全0矩阵,用来存储最终的乘积结果,比如用
[[0 for _ in range(n)] for _ in range(n)]生成。 - 遍历结果矩阵的每个位置:用两层循环,外层循环遍历结果矩阵的行
row_idx,内层循环遍历结果矩阵的列col_idx。 - 计算当前位置的乘积值:对于每个
(row_idx, col_idx),需要遍历一个中间索引k(从0到n-1),累加a[row_idx][k] * b[k][col_idx]——这里a[row_idx][k]是A第row_idx行的第k个元素,b[k][col_idx]是B第col_idx列的第k个元素,对应相乘后求和就是当前位置的结果。 - 填充结果矩阵:把计算得到的和赋值给结果矩阵的
result[row_idx][col_idx]。 - 返回结果矩阵:循环结束后,返回初始化的结果矩阵。
完整实现代码
def matrix_mult(a, b): n = len(a) # 初始化n×n的全0结果矩阵 result = [[0 for _ in range(n)] for _ in range(n)] # 遍历结果矩阵的每一行 for row_idx in range(n): # 遍历结果矩阵的每一列 for col_idx in range(n): # 计算当前位置的乘积和 total = 0 for k in range(n): total += a[row_idx][k] * b[k][col_idx] # 填充结果矩阵 result[row_idx][col_idx] = total return result
代码解释
n = len(a):获取方阵的边长,因为输入是N×N,所以a的行数就是N。result = [[0 for _ in range(n)] for _ in range(n)]:生成一个n行n列的全0矩阵,避免直接修改原矩阵。- 三层循环:第一层控制结果矩阵的行,第二层控制列,第三层完成对应行和列的元素相乘求和。
- 最后返回填充好的结果矩阵,就是两个方阵的乘积。
内容的提问来源于stack exchange,提问作者Joelinton
相关产品推荐
相关产品推荐

