【发布时间】:2020-03-25 20:42:06
【问题描述】:
我有一个数组,我想在其上使用布尔索引,有多个索引数组,每个数组产生一个不同的数组。示例:
w = np.array([1,2,3])
b = np.array([[False, True, True], [True, False, False]])
应该返回类似于以下内容的内容:
[[2,3], [1]]
我假设由于包含 True 的单元格的数量可能因掩码而异,我不能指望结果驻留在二维 numpy 数组中,但我仍然希望有比在附加掩码上迭代更优雅的东西通过第 i 个 b 掩码索引 w 的结果。
我错过了更好的选择吗?
编辑:之后我想做的下一步是将w[b] 返回的每个数组求和,返回一个标量列表。如果这以某种方式使问题变得更容易,我也很想知道。
【问题讨论】:
-
您在寻找优雅还是性能?这两个不一样。
-
如果您只想得到总和,只需使用矩阵乘法 -
b.dot(w)。 -
我会使用点积(我在模仿),但在我的真实示例中,
b和w都非常大且稀疏,其中b已知仅包含 @ 987654331@s。我要在这里表演。 -
如果它们存储在常规数组而不是稀疏矩阵中,点积应该仍然很快。
标签: python numpy indexing boolean mask