一维numpy数组高级切片:索引时如何同时满足多个筛选条件
numpy多条件索引实现说明
numpy数组索引完全支持组合多个筛选条件,你之前的写法错误是因为一维数组不能用逗号分隔多个切片:逗号是高维数组多维度索引的分隔符,用于一维数组会触发维度不匹配错误。你可以通过以下方式实现需求:
方案1:简洁单行实现(基于np.r_拼接切片)
直接用numpy的r_工具拼接多段筛选结果:
import numpy as np arr = np.arange(40) res = np.r_[arr[:10], arr[14::6], arr[15::6]] print(res)
输出完全符合你的预期:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 14, 15, 20, 21, 26, 27, 32, 33, 38, 39])
方案2:布尔掩码实现(适合更复杂的筛选规则)
如果后续筛选规则需要调整,用布尔掩码的方式扩展性更好:
import numpy as np arr = np.arange(40) mask = np.zeros_like(arr, dtype=bool) # 前10个元素全部选中 mask[:10] = True # 10之后的元素,满足(索引-14)模6小于2的都选中 mask[10:] = ((np.arange(10, len(arr)) - 14) % 6) < 2 res = arr[mask]
运行效果和方案1完全一致。
内容的提问来源于stack exchange,提问作者Keyreall
相关产品推荐
相关产品推荐

