IndexError: boolean index did not match indexed array along axis 1; size of axis is 3...

情境:

想用向量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轴哪个元素?第一个?那第二个第三个怎么办,这就会出错

说起来很绕口,词不达意是这样的。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值