Python无numpy实现向量矩阵乘法时遇索引越界错误求助
问题分析与修正
错误原因
- 向量-矩阵乘法循环逻辑错误:
原代码中向量-矩阵乘法的外层循环用了range(c),但矩阵m只有r行,当i >= r时,m[i]会直接触发索引越界。而且从代数规则看,行向量v(长度需等于矩阵行数r)乘矩阵m(r×c),结果的每个元素应该是对矩阵的每一列,累加v[j] * m[j][i](j从0到r-1),原代码的索引对应关系完全搞反了。 - 缺少输入合法性校验:
没有检查输入向量的长度是否符合矩阵乘法规则:- 向量-矩阵乘法要求
v的长度等于矩阵行数r - 矩阵-向量乘法要求
u的长度等于矩阵列数c
长度不匹配时直接计算必然触发索引越界。
- 向量-矩阵乘法要求
修正后的代码
r = int(input("输入矩阵行数: ")) c = int(input("输入矩阵列数: ")) # 构建矩阵 m = [] for i in range(r): row = [] for j in range(c): e = int(input(f"输入矩阵第{i+1}行第{j+1}列元素: ")) row.append(e) m.append(row) print("输入的矩阵:") for row in m: print(row) # 向量-矩阵乘法(v是行向量,长度需等于矩阵行数r) while True: vm = input("\n输入行向量v(元素用空格分隔,长度需等于矩阵行数{}): ".format(r)) v = [int(x) for x in vm.split()] if len(v) == r: break print(f"错误:向量长度必须为{r},请重新输入") print('向量v:', v) print('向量-矩阵乘法结果:') result_vm = [] for i in range(c): # 结果有c个元素(对应矩阵的每一列) re = 0 for j in range(r): # 遍历向量和矩阵的行 re += v[j] * m[j][i] result_vm.append(re) print(result_vm) # 矩阵-向量乘法(u是列向量,长度需等于矩阵列数c) while True: um = input("\n输入列向量u(元素用空格分隔,长度需等于矩阵列数{}): ".format(c)) u = [int(x) for x in um.split()] if len(u) == c: break print(f"错误:向量长度必须为{c},请重新输入") print('向量u:', u) print("矩阵-向量乘法结果:") result_mu = [] for i in range(r): # 结果有r个元素(对应矩阵的每一行) res = 0 for j in range(c): # 遍历矩阵的列和向量元素 res += m[i][j] * u[j] result_mu.append(res) print(result_mu)
说明
- 新增输入校验循环,确保向量长度符合乘法要求,从根源避免索引越界
- 修正向量-矩阵乘法的计算逻辑,严格对应代数运算规则
- 优化输入提示,明确告知用户所需向量的长度要求
内容的提问来源于stack exchange,提问作者BING CHILLING
相关产品推荐
相关产品推荐

