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

Python中NumPy矩阵索引越界报错(index 4 out of bounds)求解

解决NumPy矩阵索引越界问题

错误原因分析

  • A矩阵列索引越界:A是7行4列的矩阵(shape=(7,4)),但原代码中j的循环范围是range(0, len(A.T)+2),len(A.T)为4(A转置后是4行7列),导致j会取到0-5,当j>=4时,A[u][j]访问的列索引超出A的列数(0-3),触发越界错误。
  • CLU转置矩阵行索引越界:CLU是7行4列的矩阵,转置后CLU.T是4行7列(shape=(4,7)),axis0的索引范围仅为0-3。但原代码中k的循环范围是range(0, len(CLU.T[0])-1),len(CLU.T[0])为7,导致k会取到0-5,当k>=4时,CLU.T[k]访问的行索引超出范围,触发越界错误。
  • PR元素判断逻辑问题:PR是二维数组(shape=(6,1)),PR[i]是类似['E']的一维数组,直接用PR[i] in CLU.T[k]无法正确判断字符串是否存在,需提取元素值(PR[i][0])再判断。
  • 循环逻辑冗余:原代码else分支每次循环都append 0,导致n的长度远超预期,后续reshape时会出现形状不匹配问题。

修正后的代码

import numpy as np

A = np.array([
    ['A','T','W','S'],
    ['H','R','W','Q'],
    ['P','E','Z','A'],
    ['Y','U','O','W'],
    ['T','I','P','V'],
    ['R','A','M','G'],
    ['V','K','J','F']
])
PR = np.array([
    ['E'],['R'],['A'],['M'],['K'],['L']
])
CLU = np.array([
    ['A','X','A','M'],
    ['R','D','S','L'],
    ['E','F','E','B'],
    ['T','J','R','R'],
    ['L','Y','G','A'],
    ['M','R','H','D'],
    ['P','T','N','C']
])

n = [[] for _ in range(4)]
m = np.zeros((6,4))

for i in range(len(PR)):
    # 遍历A的所有列(0-3)
    for j in range(A.shape[1]):
        # 遍历A的所有行(0-6,若原需求仅取前5行可改为range(5))
        for u in range(A.shape[0]):
            # 遍历CLU转置后的所有行(0-3)
            for k in range(CLU.T.shape[0]):
                pr_val = PR[i][0]
                a_val = A[u][j]
                if pr_val in CLU.T[k] and a_val in CLU.T[k]:
                    n[k].append(1)
                    break
                else:
                    n[k].append(0)

n = np.array(n)
N = n.T
# 确保reshape的形状与元素总数匹配:6*7*4=168
z = N.reshape(6, 7, 4)

for i in range(len(PR)):
    m[i] = np.sum(z[i], axis=0)  

print(m)

关键修改点

  • 修正所有循环的索引范围,严格匹配矩阵的形状边界;
  • 将PR的二维元素转为字符串值后再进行存在性判断;
  • 使用shape属性获取矩阵维度,避免依赖len导致的维度判断错误;
  • 确保reshape时的形状与元素总数完全匹配,避免形状不匹配错误。

内容的提问来源于stack exchange,提问作者sahraoui khaoula

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:30:38