【发布时间】:2021-11-02 01:10:50
【问题描述】:
假设我有一个形状为 (nrows,ncols) 的二维布尔数组。我正在尝试有效地提取数组中每一列的最高 True 值的索引。如果该列具有所有 False 值,则不返回该列的索引。下面是一个形状为 (4,6) 的布尔数组示例,其中粗体 Trues 的索引将是所需的输出。
假假假假假假真假
真 假 假 真 假 假
True False True False False True
真 假 真 真 假 假
索引的期望输出(行,列):[(1,0),(2,2),(1,3),(2,5)]
我尝试使用 numpy.where 以及天际线算法的实现,但是这两个选项都很慢。有没有更有效的方法来解决这个问题?
提前感谢您的帮助。
【问题讨论】:
-
不要认为这里有比从上到下遍历每列直到第一个 True 更好的方法
-
定义“高效”。你必须走遍整个阵列,所以你不能比
O(n^2)做得更好。您只能尽量避免较大的常量开销。 -
@Thomas 我认为您的意思是 O(N) 的数组大小。
-
@juanpa.arrivillage 当然。我认为问题大小
n是行数+列数。