NumPy三维数组第三维度非连续切片语法报错如何解决
错误原因
你编写的代码报错是因为[1:7,8:11]不符合Python语法规范:Python原生列表不支持直接将多个切片对象作为元素放入方括号,NumPy也没有提供这种直接在索引列表中拼接多段切片的语法。
修正方案
方案1:使用np.r_拼接切片(最简便)
NumPy提供的np.r_可以直接将多个切片、整数、数组合并为一维索引数组,刚好适配你的需求,修正后代码如下:
import numpy as np # 赋值场景(newarr已预先初始化) newarr[:, :, 1:10] = oldarr[:, :, np.r_[1:7, 8:11]] # 如果还未创建newarr,也可以直接提取生成,更简洁 newarr = oldarr[:, :, np.r_[1:7, 8:11]]
np.r_[1:7, 8:11]会自动生成索引数组[1,2,3,4,5,6,8,9,10],长度为9,和左侧[:, :, 1:10]的9个位置长度完全匹配,不会出现维度不兼容问题。
方案2:手动拼接索引数组
如果不想依赖np.r_,也可以手动生成两个区间的索引再拼接:
import numpy as np # 生成目标索引数组 target_idx = np.concatenate([np.arange(1, 7), np.arange(8, 11)]) newarr[:, :, 1:10] = oldarr[:, :, target_idx]
内容的提问来源于stack exchange,提问作者Kun
相关产品推荐
相关产品推荐

