big_list = [0,1,0,2,3,2,5,6,7,5,6,4,5,3,4,3,5,6,5]
small_list = [0,1,2,3,4]
from collections import defaultdict
dicto = defaultdict(list) #dictionary stores all the relevant coordinates
#so you don't have to search for them later
for ind, ele in enumerate(big_list):
dicto[ele].append(ind)
结果:
>>> for ele in small_list:
... print dicto[ele]
...
[0, 2]
[1]
[3, 5]
[4, 13, 15]
[11, 14]
3条答案
按热度按时间bvjveswy1#
Numpy提供了numpy.searchsorted函数:http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.searchsorted.html
示例:
wfauudbj2#
在您的情况下,您可能会受益于预排序您的大数组。下面的例子演示了如何将时间从~ 45秒减少到2秒(在我的笔记本电脑上)(对于一组特定长度的数组5e 6和1 e3)。显然,如果数组大小相差很大,那么这个解决方案就不是最优的。例如,默认解决方案的复杂度为O(bigN*smallN),但对于我建议的解决方案,复杂度为O((bigN+smallN)*log(bigN))
输出:
电话:+86-527 - 8530121
非暴力1.57193303108
bejyjqdl3#
到目前为止,我看不出有任何需要numpy;你可以使用
defaultdict
,只要你的内存足够,如果观察的数量不是太多,应该是数百万。结果:
这应该能给予你一些速度。