Numpy中matrix[True, False]索引行为的原理探究
NumPy布尔索引的特殊行为原理
先明确核心区别:你用matrix[[True, False]]时,是一维布尔数组/列表和矩阵的行维度(长度2)匹配,所以筛选出对应行,这是常规的布尔索引逻辑。而你遇到的matrix[True, False]这类用单个布尔值的情况,本质是NumPy的广播机制和维度规则在起作用:
- 当你给单个布尔值作为索引时,它会被广播成对应维度全是该布尔值的数组,同时NumPy要求索引的维度数要和数组维度数兼容:
- 对于
matrix[True, False]:
你的矩阵是2维(形状(2,2)),这里的两个单个布尔值分别对应行、列维度。True会被广播成行维度的[True, True](选中所有行),False被广播成列维度的[False, False](不选中任何列),最终自然返回空数组。 - 对于
matrix[True, True]:
两个True分别广播成行、列维度的全选数组,也就是选中所有行和所有列,所以返回整个矩阵。 - 对于
matrix[True, True, False]:
你的矩阵只有2维,但这里给了3个索引维度。NumPy会自动给矩阵添加一个长度为1的新维度(变成3维,形状(1,2,2)),第三个False对应这个新维度,意味着不选中该维度的任何元素,所以最终返回空数组。
- 对于
简单总结:单个布尔值索引是对整个维度的全选或全排除,索引维度数和数组维度数匹配时,每个布尔值对应一个维度的选择;索引维度数超过数组维度时,会自动扩展数组维度,多余的布尔值决定新维度是否被选中,False就会导致空结果。
内容的提问来源于stack exchange,提问作者Gleb Kosharin
相关产品推荐
相关产品推荐

