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

矩阵乘法索引越界问题排查:方阵正常矩形矩阵异常

问题分析与解决方案

你的代码在处理矩形矩阵时出现索引越界错误,核心问题是矩阵乘法的循环索引逻辑完全混乱,方阵场景下只是碰巧没触发越界而已,咱们一步步拆解:

错误根源

报错信息 index 1 is out of bounds for axis 0 with size 1 来自这里:
当你用3×1的矩阵B时,c2=1,但你写了for i in range(c2+1)——也就是i会取0和1。而结果矩阵C是3×1的,列索引只能是0,当i=1时访问C[i][j],自然会触发列索引越界。

除此之外,你的三重循环变量顺序和对应关系完全不符合矩阵乘法的规则:
矩阵乘法中,A(r₁×c₁) × B(r₂×c₂) 的结果C(r₁×c₂),每个元素的计算规则是:
C[i][k] = Σ(A[i][j] * B[j][k]),其中j从0到c₁-1(要求c₁=r₂)。
你的循环里k、i、j的对应关系完全搞反了,这才是本质问题。

修正后的代码

import numpy as np
A = np.array([[12,7,3], [4 ,5,6], [7 ,8,9]])
B = np.array([[1],[1],[1]])
r1, c1 = A.shape
r2, c2 = B.shape

# 初始化结果矩阵,维度是r1×c2,用numpy的zeros更简洁
C = np.zeros((r1, c2), dtype=int)

if c1 == r2:
    # 正确的三重循环逻辑:遍历C的行→遍历C的列→遍历累加维度
    for i in range(r1):
        for k in range(c2):
            for j in range(c1):
                C[i][k] += A[i][j] * B[j][k]
    print("Matrix After Multiplication \n\n", C)
else:
    print('Multiplication is not possible')

运行这段代码,你会得到正确的结果:

Matrix After Multiplication 

 [[22]
 [15]
 [24]]

额外建议

其实numpy本身提供了非常高效的矩阵乘法实现,完全不需要手动写循环:

  • 使用np.dot(A, B)
  • 或者直接用@运算符:A @ B
    这两种方式不仅代码简洁,性能也远高于手动循环,尤其是处理大矩阵的时候。

内容的提问来源于stack exchange,提问作者Hafiz Muhammad Adeel Akbar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:12:31