我在numpy中有一个一维数组,我想找出一个值超过numpy数组中的值的索引的位置。
例如。
aa = range(-10,10)
在超过值5
的aa
中查找位置。
发布于 2013-04-27 03:42:17
这会更快一点(看起来也更好)
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
发布于 2014-07-30 17:09:54
对于已排序的数组内容,还有一个更快的方法: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
发布于 2013-04-27 03:42:53
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
https://stackoverflow.com/questions/16243955
复制相似问题