在一个被多次调用的低级函数中,我需要做相当于python的list.index,但是需要一个numpy数组.函数需要在找到第一个值时返回,否则引发ValueError.就像是:
>>> a = np.array([1, 2, 3])
>>> np_index(a, 1)
0
>>> np_index(a, 10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 10 not in array
Run Code Online (Sandbox Code Playgroud)
我希望尽可能避免使用Python循环. np.where不是一个选项,因为它总是遍历整个数组; 一旦找到第一个索引,我需要停止的东西.
编辑:与问题相关的一些更具体的信息.
大约90%的时间,我正在搜索的索引是阵列的前1/4到1/2.因此,这里可能存在2-4倍的加速因素.另外10%的时间值根本不在数组中.
我已经分析了一些东西,并且调用np.where是瓶颈,至少占总运行时间的50%.
提出一个并不重要ValueError; 它只需要返回一些显然表明该值不在数组中的东西.
我建议可能会在Cython中编写一个解决方案.