Following jtaylor's advice I converted the result of np.searchsorted to a list with .tolist():def func_opt3(): c_lst = [[] for _ in range(len(a_lst[c:])-1)] c_opt = np.searchsorted(a_lst[c:], b_lst, side='left').tolist() for indx,elem in enumerate(c_opt): if 0<elem<len(a_lst[c:]): c_lst[elem-1].append(indx) return c_lst这比原始功能快约470倍.This is ~470x faster than the original function.推荐答案您想看看numpy的 searchsorted .打电话You want to take a look at numpy's searchsorted. Callingnp.searchsorted(a_lst, b_lst, side='right')将返回一个索引数组,该索引的长度与b_lst相同,保持在a_lst中应插入它们以保持顺序的位置.这将非常快,因为它使用二进制搜索,并且循环发生在C中.然后,您可以创建带有花式索引的子数组,例如:will return an array of indices, the same length as b_lst, holding before which item in a_lst they should be inserted to preserve order. It will be very fast, as it uses binary search and the looping happens in C. You could then create your subarrays with fancy indexing, e.g.:>>> a = np.arange(1, 10)>>> b = np.random.rand(100) * 10>>> c = np.searchsorted(a, b, side='right')>>> b[c == 0]array([ 0.54620226, 0.40043875, 0.62398925, 0.40097674, 0.58765603, 0.14045264, 0.16990249, 0.78264088, 0.51507254, 0.31808327, 0.03895417, 0.92130027])>>> b[c == 1]array([ 1.34599709, 1.42645778, 1.13025996, 1.20096723, 1.75724448, 1.87447058, 1.23422399, 1.37807553, 1.64118058, 1.53740299]) 这篇关于加快列表之间的浮点数比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-04 02:42