我有一个纽比阵列y:
y = np.arange(35).reshape(5,7)
5行,7列。现在我创建了一个布尔的1-d 5元素掩码,它挑选出我想要的行(在numpy indexing处的文档之后):
^{pr2}$然后y[b]
返回感兴趣的行。但是医生很困惑:它说
Boolean arrays must be of the same shape as the array being indexed, or broadcastable to the same shape.
b是可与y一起广播的:
>>> np.broadcast_arrays(y, b)
ValueError: shape mismatch: two or more arrays have incompatible dimensions on axis 1.
因为广播是通过匹配尾部维度和反向工作来实现的。在
在这个布尔索引的例子中,显然有一些不同的规则在起作用;doc是错的还是我只是误解了它?如果我按照doc的建议将b设为shape(5,1),它不会选择行;它只获取每个选定行的第一列并将其作为一维数组返回。在
我怀疑真正的规则是布尔对象的dim必须与原始数组的initialdim相匹配,并且它选择布尔值为真的每个dim的值,返回任何尾随dim的所有元素。但我找不到任何官方的说法。在
所以我的问题是:(a)我做得对,医生就是错了吗?(b) 我看错医生了吗?(c) 有没有更好的/不同的方法来做或理解它?在
还原
y[b]
似乎能满足您的需要。我不认为这与文档不符,这里也没有布尔和数字的特殊情况。在相关问题 更多 >
编程相关推荐