我有两个1维numpy.ndarray对象,并想知道第一个数组中的哪些元素在第二个数组中的任何元素的dx内.
我现在拥有的是什么
# setup numpy.random.seed(1) a = numpy.random.random(1000) # create one array numpy.random.seed(2) b = numpy.random.random(1000) # create second array dx = 1e-4 # close-ness parameter # function I want to optimise def find_all_close(a,b): # compare one number to all elements of b def _is_coincident(t): return (numpy.abs(b - t) <= dx).any() # vectorize and loop over a is_coincident = numpy.vectorize(_is_coincident) return is_coincident(a).nonzero()[0]
返回timeit结果如下
10 loops,best of 3: 16.5 msec per loop
优化find_all_close函数的最佳方法是什么,特别是如果a和b保证是浮点数组,当它们传递给find_all_close时可能会以升序排序,可能是cython或类似的?
在实践中,我正在使用10,000到100,000个元素(或更大)的数组,并在几百个不同的b数组上运行整个操作.