我有一个大的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
数组不必排序。
速度是一个问题,因为values
和searchvals
都可能很大,
for searchval in searchvals:
np.where(values == searchval)[0]
没有削减它。
任何提示?
答案 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]