不满足条件的第一个值的索引Numpy



我有一个2D numpy数组,看起来类似于:

np.array([
[5, 4, 3, 2, 1], 
[4, 3, 3, 3, 3],
[4, 4, 2, 5, 1],
[2, 2, 2, 2, 1] 
])

我想找到违反条件的第一个值的索引,如果它们都满足条件,则返回maximum index + 1。例如,我想找到条件value >=3为false的第一个索引。

  • ls = [5,4,3,2,1]中,它将是3,因为value>=3为false的第一个索引是具有值的ls[3]2

  • ls = [4,3,3,3,3]中,由于列表中的所有值都满足value >=3,因此返回最大索引+1,即5。

  • 因此,对于ls= [4,4,2,5,1],它将是2,因为第一个索引违反该条件的是作为值CCD_ 11的CCD_。

  • 因此,对于ls= [2,2,2,2,1],它将是0,因为第一个索引违反该条件的是值CCD_ 14的CCD_。

我当前的尝试应用我的条件创建布尔掩码,然后使用np.argmin()查找第一个false值的索引

np.apply_along_axis(
lambda x: np.argmin(x>=3),
1,
np.array([
[5, 4, 3, 2, 1], 
[4, 3, 3, 3, 3],
[4, 4, 3, 5, 1],
[2, 2, 2, 2, 1] 
])
)

但这会输出array([3, 0, 2, 0]),因为当数组中的所有值都满足条件时,此方法无法处理第二种情况。有更好的方法吗?请记住,这必须应用于数千个这样的阵列,因此理想情况下必须将复杂性保持在最低限度。

这里有一种方法-

In [60]: a
Out[60]: 
array([[5, 4, 3, 2, 1],
[4, 3, 3, 3, 3],
[4, 4, 2, 5, 1],
[2, 2, 2, 2, 1]])
In [61]: m = a<3
In [62]: np.where(m.any(1),m.argmax(1),a.shape[1])
Out[62]: array([3, 5, 2, 0])

最新更新