gpt4 book ai didi

python - Numpy 与 bool 索引和广播的混淆

转载 作者:行者123 更新时间:2023-11-28 19:23:02 27 4
gpt4 key购买 nike

我有一个 numpy 数组 y:

y = np.arange(35).reshape(5,7)

5 行,7 列。现在我创建一个 bool 值 1-d 5 元素掩码,它挑选出我想要的行(遵循 numpy indexing 的文档):

b = np.array([False, False, True, False, True])

然后 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.

因为广播是通过匹配尾随维度并向后工作来工作的。

在这种 bool 索引的情况下,显然有一些不同的规则在起作用;文档是错误的还是我只是误解了它?如果我按照文档的建议进行操作并使 b 的形状为 (5,1),它不会挑选行;它只是获取每个选定行的第一列并将其作为一维数组返回。

我怀疑真正的规则是 bool 对象的 dims 必须与原始数组的 initial dims 相匹配,并且它选择 bool 值为真的每个 dims 的值,返回任何数组的所有元素拖尾暗淡。但我找不到任何官方说明它是如何工作的。

所以我的问题是,(a) 我做的对吗,文档是错的? (b) 我读错了文档吗? (c) 是否有更好/不同的方法来做或理解它?

最佳答案

y[b] 的缩减似乎可以满足您的要求。我不认为它与文档不一致,这里没有 bool 值与数字广播的特殊情况。

y[b] # gives what you want
# broadcast booleans
np.broadcast_arrays(b, y) #gives the error you saw
np.broadcast_arrays(b[:,np.newaxis], y) #broadcasts.
# same as broadcast numbers
np.broadcast_arrays(np.arange(5), y) #ALSO gives the error you saw
np.broadcast_arrays(np.arange(5)[:,np.newaxis], y) #broadcasts.

关于python - Numpy 与 bool 索引和广播的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20102057/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com