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

标签 python python-3.x 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] 
])

我想找到第一个违反条件的值的索引,如果它们都满足条件,则返回最大索引+ 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 违反条件的是ls[2],它的值是2

  • 对于 ls= [2,2,2,2,1],自第一个索引以来,它将为 0 违反条件的是 ls[0],其值为 2

我当前尝试应用我的条件来创建 bool 掩码,然后使用 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])

关于python - 不满足条件的第一个值的索引 Numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63685913/

相关文章:

python - 如何在 Python 中将字符串包装到文件中?

python - 将元组的嵌套列表转换为元组中第一个元素的嵌套列表

python - 从 C 代码序列化数组数据,在 Python 中反序列化

python - R 到 Python/Numpy 线性回归曲线

python - 使用 f2py 将锯齿状数组传递给 Fortran

python - 没有提供 argv 时如何打印错误

python - 如何在Python中转换requests.models.Response对象中的dict对象?

python-3.x - 运行时错误 : size mismatch m1: [a x b], m2: [c x d]

python-3.x - 如何在Sanic中执行文件上传

python - tf.data.Dataset : how to get the dataset size (number of elements in a epoch)?