Python 3.9中NumPy索引的星号表达式报错,求兼容实现方案
解决Python 3.9+中索引时的星号表达式语法错误
问题分析
你遇到的错误源于Python 3.9及后续版本收紧了索引表达式中星号展开的语法规则,y[...,(*x)]这类写法不再被允许,但可以通过元组拼接的方式实现相同效果,同时保留...以适配任意维度的数组。
解决方案
直接将...和元组x拼接成完整的索引元组,再用于数组索引:
import numpy as np # 获取数据 y = np.random.randn(100,100,100) # 索引存储为元组 x = (1,2) # Python 3.9+ 等价写法 result = y[(...,) + x]
原理说明
- 在NumPy索引规则中,
...(Ellipsis)是特殊索引对象,作为元组成员时可与其他索引值/元组直接拼接。 - 当
x=(1,2)时,(...,) + x会生成(Ellipsis, 1, 2),和你原本期望的y[...,1,2]完全等价。 - 该写法不依赖数组具体维度,
...会自动匹配剩余前置维度,完美保留原有逻辑。
验证
运行上述代码后,result与y[:,1,2]结果完全一致,且能适配任意维度的数组和任意长度的索引元组x。
内容的提问来源于stack exchange,提问作者JDoe2
相关产品推荐
相关产品推荐

