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

Python任意阶矩阵乘法代码报错:'int'对象不可下标访问,求排查修复

矩阵乘法代码报错修复:'int' object is not subscriptable

问题分析

  • 结果矩阵初始化错误:原代码中ResultMatrix = ([0]*col_B)*row_A的写法存在本质问题。在Python中,([0]*col_B)*row_A会将一维列表[0]*col_B重复row_A次,最终生成的是一维列表(比如row_A=2、col_B=2时,结果为[0,0,0,0])。当尝试访问ResultMatrix[i][j]时,ResultMatrix[i]是整数0,无法进行下标访问,从而触发'int' object is not subscriptable错误。
  • 行列数计算冗余:原代码通过循环计数行列数完全没必要,直接用len()函数即可快速获取矩阵的行、列数。
  • 相乘条件判断冗余:原代码if (col_A > row_B) or (col_A < row_B)等价于if col_A != row_B,可简化写法让逻辑更清晰。

修复后的代码

def MatrixMatrixMultiply(A, B):
    # 高效获取矩阵行列数,增加空矩阵判断避免索引错误
    row_A = len(A)
    col_A = len(A[0]) if row_A > 0 else 0
    row_B = len(B)
    col_B = len(B[0]) if row_B > 0 else 0

    # 判断矩阵是否满足相乘条件
    if col_A != row_B:
        return "Error! Multiplication is not possible"
    
    # 正确初始化二维结果矩阵:每行都是独立的新列表
    ResultMatrix = [[0 for _ in range(col_B)] for _ in range(row_A)]
    
    # 矩阵乘法核心计算逻辑
    for i in range(row_A):
        for j in range(col_B):
            for k in range(col_A):
                ResultMatrix[i][j] += A[i][k] * B[k][j]
    
    return ResultMatrix

# 测试用例
A = [[1,2,3],[4,5,6]]
B = [[7,8],[9,10],[11,12]]
print(MatrixMatrixMultiply(A,B))

关键修改说明

  • 结果矩阵初始化:改用列表推导式[[0 for _ in range(col_B)] for _ in range(row_A)],确保每行都是独立的新列表,既避免了引用重复问题,又正确创建了二维矩阵结构。
  • 行列数获取:用len(A)直接获取A的行数,len(A[0])获取A的列数,同时增加空矩阵判断,防止空矩阵场景下的索引错误。
  • 条件判断简化:直接判断col_A != row_B,逻辑更直观简洁。

内容的提问来源于stack exchange,提问作者Guy Weizman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:00:42