我有两个描述空间曲线的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>)

最佳答案

你的代码做了很多你不需要的事情。首先在每个循环上重建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

如果仍然不够快,你需要更详细地描述你的问题,并找出另一个搜索算法是否能更好地解决你的问题。

关于python - python找到两个numpy数组的交点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36020959/

10-10 16:27