我有这个数组:
arr = np.array([3, 7, 4])
Run Code Online (Sandbox Code Playgroud)
这些布尔索引:
cond = np.array([False, True, True])
Run Code Online (Sandbox Code Playgroud)
我想在布尔条件为真的数组中找到最大值的索引.所以我这样做:
np.ma.array(arr, mask=~cond).argmax()
Run Code Online (Sandbox Code Playgroud)
哪个工作并返回1.但如果我有一个布尔索引数组:
cond = np.array([[False, True, True], [True, False, True]])
Run Code Online (Sandbox Code Playgroud)
是否有一个矢量化/ numpy方式迭代布尔索引数组返回[1,2]?
对于 的特殊用例argmax
,您可以使用np.where
掩码值并将其设置为负无穷大:
>>> inf = np.iinfo('i8').max
>>> np.where(cond, arr, -inf).argmax(axis=1)
array([1, 2])
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用以下命令手动广播np.tile
:
>>> np.ma.array(np.tile(arr, 2).reshape(2, 3), mask=~cond).argmax(axis=1)
array([1, 2])
Run Code Online (Sandbox Code Playgroud)