我需要在一个二维数组中找到每行最小值的索引,同时满足列值的附加约束条件。有两个数组a
和b
。
a = np.array([[1,0,1],[0,0,1],[0,0,0],[1,1,1]])
b = np.array([[1,-1,2],[4,-1,1],[1,-1,2],[1,2,-1]])
本文旨在寻找符合以下条件的索引:a == 1
,b
为正数且是该行中最小的b
值。满足前两个条件很容易实现。
idx = np.where(np.logical_and(a == 1, b > 0))
这将产生以下索引:
(array([0, 0, 1, 3, 3]), array([0, 2, 2, 0, 1]))
现在我需要过滤掉重复的行条目(仅保留最小值),但我想不到一个优雅的方法来实现。在上面的例子中,结果应该是:
(array([0,1,3]), array([0,2,0]))
编辑:
它还应该适用于包含除了0
和1
之外的其他值的a
。
0
出现了两次而1
被省略了。 - Jon Clementsa
上的条件,您可以获得两个维度的索引。在b
中检查这些位置是否与每行最小的非负值相符。如果不匹配,则删除它。 - Christian K.