情境:
想用向量y=[[1],[0],[1],[1]]给x=[[1,2,1],[3,4,3],[5,6,5],[7,8,7]]切片筛选,即x_=x[y==1]]
具体报错:
IndexError: boolean index did not match indexed array along axis 1; size of axis is 3 but size of corresponding boolean axis is 1
报错的大概意思:
这个
IndexError
错误表明你尝试用一个布尔数组去索引另一个数组,但是这两个数组在指定的轴(这里是轴1,即列)上的尺寸不匹配。具体来说,你试图索引的数组在轴1上的尺寸是3,而你提供的布尔索引数组在相应轴上的尺寸是1。即y的1轴只有1个元素,尺寸为1,x的1轴有3个元素,尺寸为3,不匹配
错因:
细节弄错了,切片筛选用的数组应该是一维的,才能迭代判断,但我这里用的y是二维的,所以报错了
解决办法:reshape一下,将y变成一维的向量:y.reshape(-1)
还有一种解决方案是针对这个错因的,方便理解这个错因,但不是我想要的答案:
把x和y的1轴元素个数弄相等 :
总结:
用y做布尔数组做筛选时,其实是迭代y,y一维的话,那自然就相应的选择x的整行,y二维的话,那迭代也会迭代y的某行所有数据,此时会因为判断也要选择x某行对应位置的数据,这也就是为什么y的1轴元素个数为1,x的1轴元素个数为3会出错的原因:y遍历1轴第一个元素时如果bool=True,那x要保留1轴哪个元素?第一个?那第二个第三个怎么办,这就会出错
说起来很绕口,词不达意是这样的。