我有一个numpy数组y:
y = np.arange(35).reshape(5,7)
5行,7列 . 现在我创建一个布尔1-d 5元素掩码,它可以选择我想要的行(遵循numpy indexing处的文档):
b = np.array([False, False, True, False, True])
然后 y[b]
返回感兴趣的行 . 但该文件令人困惑:它说
布尔数组必须与要索引的数组具有相同的形状,或者可以播放到相同的形状 .
并且b不能与y一起播放:
>>> np.broadcast_arrays(y, b)
ValueError: shape mismatch: two or more arrays have incompatible dimensions on axis 1.
因为广播通过匹配尾随尺寸和向后工作来工作 .
在这种布尔索引的情况下,显然有一些不同的规则在起作用;文件是错的还是我只是误解了?如果我做了文档所建议的并使b成形(5,1),它就不会挑出行;它只获取每个选定行的第一列,并将其作为一维数组返回 .
我怀疑真正的规则是布尔对象's dims must match the original array' s初始变暗,并且它选择布尔为真的每个dims的值,返回任何尾随dim的所有元素 . 但我可以't find anything official that says that'它是如何工作的 .
所以我的问题是,(a)我做得对吗,文件是错的? (b)我读错了医生吗? (c)有更好/不同的方式来做或理解它吗?
1 回答
减少
y[b]
似乎做你想要的 . 我不会与文档不一致,并且没有特殊情况下布尔与数字进行广播 .