You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:30:48