numpy dtype=object类型数组布尔掩码索引返回空数组问题咨询
问题核心原因
该现象本质是索引编写失误导致的非预期行为,你实际使用的错误写法arr[True, False, True, True]和正确写法arr[[True, False, True, True]]对应完全不同的numpy索引规则:
错误写法的执行逻辑
numpy中方括号内用逗号分隔的多个值,会被识别为多维度索引,每个值对应数组一个维度的筛选规则:
- 你创建的
arr是1维数组,shape为(4,),仅第0维是长度为4的有效维度 - 你传入4个逗号分隔的布尔值,numpy会默认目标为4维数组,自动给
arr的shape后补3个长度为1的维度,临时变为(4, 1, 1, 1) - 第二个维度的索引值为
False,该维度长度为1,用单个False索引时会筛选出0个元素,最终整体返回空数组,shape为(0, 4) - 当4个布尔值全为
True时,每个维度都能匹配到全部元素,最终返回补维度后的嵌套二维数组,虽然内容看起来正确,但实际shape已经不符合预期。
正确写法的执行逻辑
arr[[True, False, True, True]]中,你把布尔列表放在同一层方括号内,相当于明确告知numpy:这是仅作用于第0维的布尔掩码:
- 掩码长度和第0维的长度4完全匹配,会筛选出第0维对应位置为
True的3个元素 - 返回结果的shape为
(3,),符合预期。
内容的提问来源于stack exchange,提问作者S.A.
相关产品推荐
相关产品推荐

