具有2D Lat和Lon Python的最近邻或KD树

2024-04-27 00:20:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我要做的是:

我想做的是为最近的邻居提供一个函数,用户提供经纬度数组和一个奇点。在这个函数中,我不介意从不同的库(比如scipykdtree)应用一个函数。之前,我应用了以下函数,该函数用于查找1D lat和lon数组的最近邻:

    import numpy as np
    def find_index_of_nearest_xy(lat_array, lon_array, lat_point, lon_point, num_neighbors = 4):
        dist = np.sqrt(np.abs((lon_array-lon_point)**2 + (lat_array - lat_point)**2))
        sorted_dist = sorted(dist)
        values = np.array(sorted_dist[:num_neighbors])
        indices = np.in1d(dist,values)

        return indices

我知道有一种更有效的方法来寻找最近点的索引,但这种方法对于我之前所做的应用程序来说很快。在

更多详情:

我现在遇到的问题是,我的函数只在lat和lon是1D的情况下才起作用。对于我的新数据集,我的lat和lon数组都是2D的,每个数组的形状都是(5500,5500),所以对它进行拆分和应用我的函数将非常低效,因为我在3个月内每5分钟执行一次分析。这种方法的一个例子是:

^{pr2}$

我发现了this link,它解释了如何使用lat和lon坐标执行kd树,但是lat和lon也是1D

我想返回索引,因为我将在稍后的步骤中将其应用于lat、lon和数据数组。在

所以,我的一般问题是,如果经纬度数组是二维的(即我需要从中提取邻居的数据集),有谁能解释/提供一个例子(或一个链接),说明如何为指定的经纬度坐标(例如36.538537 N,126.330194 E)提取特定数量的邻居(在本例中为4)。在

如果有用的话,我正在处理卫星可见光数据。在

我已经尝试过:

以前我曾尝试过拆开数组(如上所示),这就是我发现它效率极低的原因。我还让它返回True/False值,然后查找数组的True,但这比第一种方法效率更高。我尝试使用heapq库中的nsmallest,但没有成功,因为我不知道如何恰当地使用库。在

我已经进行了广泛的搜索,试图找到一个解决我的问题,没有胜利,所以我没有选择,现在请社区。在


Tags: 数据方法函数distnpneighbors数组array