如何无需转换元组,让自定义类直接作为Numpy切片索引?
问题解答
目前Python和NumPy都不支持让自定义类对象直接作为多维数组的索引(无需转换方法)。
NumPy的索引机制有严格的类型校验,仅认可以下几类合法索引:
- 整数、切片(
:)、省略号(...)、numpy.newaxis(即None) - 整数数组或布尔数组
- 由上述类型组成的元组
你的自定义CustomDuple对象不属于这些合法类型范畴,因此会触发IndexError。如果不借助to_tuple()这类转换方法,没有途径让NumPy自动将其解析为有效的索引元组——NumPy未提供自定义索引类型的扩展接口,也不会主动尝试把自定义对象转换为元组。
如果一定要实现类似效果,只能通过显式转换(比如你提到的to_tuple方法),或者在类中实现__iter__方法后用*解包(如matrix[*duple]),但这本质上仍属于转换操作,不符合你“无需转换方法”的要求。
内容的提问来源于stack exchange,提问作者Mert Mint
相关产品推荐
相关产品推荐

