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

Python类中方法返回int值作numpy数组索引报IndexError排查

问题描述

自定义Python类在__init__初始化阶段定义变量时,需要访问类内部numpy数组的指定索引位置元素,运行时触发如下IndexError:

IndexError                                Traceback (most recent call last)
Input In [82], in <cell line: 17>()
     14     def index(self, n = 0):
     15         return (len(self.array) - n).astype(int)
---> 17 something = Do_something()

Input In [82], in Do_something.__init__(self, a_number)
      6 self.number = a_number
      7 self.array = np.zeros((1,3), dtype = float)  
----> 9 self.a = self.array[self.index,0]
     10 self.b = self.array[self.index,1]
     11 self.c = self.array[self.index,2]

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

报错明确说明:numpy数组仅接受整数、切片(:)、省略号(...)、numpy.newaxis(即None)、整数/布尔数组作为合法索引类型。

出错原始代码
import numpy as np

class Do_something:
   
    def __init__(self, a_number = 0):
        self.number = a_number
        self.array = np.zeros((1,3), dtype = float)  
        
        self.a = self.array[self.index,0]
        self.b = self.array[self.index,1]
        self.c = self.array[self.index,2]
    
     #return a negative index of n
    def index(self, n = 0):
        return (len(self.array) - n).astype(int)
    
something = Do_something()
错误根源
  • 核心错误:调用实例方法self.index时遗漏括号,传入数组索引位置的是方法对象本身,而非方法执行后返回的整数值,不符合numpy索引的类型要求。
  • 附带问题:原index方法的返回值计算逻辑存在偏差,即使正确调用方法也容易出现索引越界问题。
修复方案

修复点共两处:

  • 调用self.index时补充括号,触发方法实际执行,获取整数类型的索引值
  • 调整index方法的返回值计算逻辑,避免索引越界

修复后可正常运行的代码如下:

import numpy as np

class Do_something:
   
    def __init__(self, a_number = 0):
        self.number = a_number
        self.array = np.array([[1,2,3],[4,5,6], [7,8,9]])  
        
        self.a = self.array[self.index(),0]
        self.b = self.array[self.index(),1]
        self.c = self.array[self.index(),2]
    
    # 返回指定偏移的反向索引
    def index(self, n = 2):
        return (len(self.array) - (n + 1))

    
something = Do_something()
print("length is " + str(len(something.array)))
print(something.a)
print(something.b)
print(something.index())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:54:15