我有两个描述空间曲线的numpy数组,它们在一个点上相交,我想在两个数组中找到该交点的最近值,我有这个代码可以正常运行但是它的速度很慢分数。
from scipy import spatial
def nearest(arr0, arr1):
ptos = []
j = 0
for i in arr0:
distance, index = spatial.KDTree(arr1).query(i)
ptos.append([distance, index, j])
j += 1
ptos.sort()
return (arr1[ptos[0][1]].tolist(), ptos[0][1], ptos[0][2])
结果将为(<point coordinates>,<position in arr1>,<position in arr0>)
答案 0 :(得分:3)
您的代码正在做很多您不需要的事情。首先,你在每个循环中重建KDtree,这是一种浪费。此外query
采用一系列点,因此无需编写自己的循环。 Ptos是一种奇怪的数据结构,你不需要它(并且不需要对它进行排序)。尝试这样的事情。
from scipy import spatial
def nearest(arr0, arr1):
tree = spatial.KDTree(arr1)
distance, arr1_index = tree.query(arr0)
best_arr0 = distance.argmin()
best_arr1 = arr1_index[best_arr0]
two_closest_points = (arr0[best_arr0], arr1[best_arr1])
return two_closest_points, best_arr1, best_arr0
如果仍然不够快,您需要更详细地描述您的问题,并确定其他搜索算法是否能更好地解决您的问题。