Numpy首次出现的值大于现有值

我在numpy中有一个1D数组,我想find一个值超过numpy数组值的索引位置。

例如

aa = range(-10,10) 

find位置在哪里,价值5被超过。

这有点快(看起来更好)

 np.argmax(aa>5) 

由于argmax将停止在第一个True (“如果出现多次最大值,则返回与第一次出现相对应的索引”),并且不保存另一个列表。

 In [2]: N = 10000 In [3]: aa = np.arange(-N,N) In [4]: timeit np.argmax(aa>N/2) 100000 loops, best of 3: 52.3 us per loop In [5]: timeit np.where(aa>N/2)[0][0] 10000 loops, best of 3: 141 us per loop In [6]: timeit np.nonzero(aa>N/2)[0][0] 10000 loops, best of 3: 142 us per loop 

给定你的数组的sorting内容,有一个更快的方法: searchsorted 。

 import time N = 10000 aa = np.arange(-N,N) %timeit np.searchsorted(aa, N/2)+1 %timeit np.argmax(aa>N/2) %timeit np.where(aa>N/2)[0][0] %timeit np.nonzero(aa>N/2)[0][0] # Output 100000 loops, best of 3: 5.97 µs per loop 10000 loops, best of 3: 46.3 µs per loop 10000 loops, best of 3: 154 µs per loop 10000 loops, best of 3: 154 µs per loop 
 In [34]: a=np.arange(-10,10) In [35]: a Out[35]: array([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In [36]: np.where(a>5) Out[36]: (array([16, 17, 18, 19]),) In [37]: np.where(a>5)[0][0] Out[37]: 16