Numpy int数组:查找多个目标int的索引

时间:2016-07-08 12:07:50

标签: python arrays numpy

我有一个大的numpy数组(dtype=int)和一组我想在该数组中找到的数字,例如,

import numpy as np
values = np.array([1, 2, 3, 1, 2, 4, 5, 6, 3, 2, 1])
searchvals = [3, 1]
# result = [0, 2, 3, 8, 10]

result数组不必排序。

速度是一个问题,因为valuessearchvals都可能很大,

for searchval in searchvals:
    np.where(values == searchval)[0]

没有削减它。

任何提示?

3 个答案:

答案 0 :(得分:5)

这够快吗?

>>> np.where(np.in1d(values, searchvals))
(array([ 0,  2,  3,  8, 10]),)

答案 1 :(得分:1)

我会说using np.in1d将是解决此类案例的直观解决方案。话虽如此,基于this solution这里是np.searchsorted -

的替代方案
sidx = np.argsort(searchvals)
left_idx = np.searchsorted(searchvals,values,sorter=sidx,side='left')
right_idx = np.searchsorted(searchvals,values,sorter=sidx,side='right')
out = np.where(left_idx != right_idx)[0]

答案 2 :(得分:0)

你能一起避免numpy吗?列表连接应该比依赖于numpy的方法快得多。即使values需要一个numpy数组,这仍然有效。

result = []
for sv in searchvals:
    result += [i for i in range(len(values)) if values[i] == sv]