從緯度/經(jīng)度數(shù)據(jù)(以弧度為單位)開始,我試圖有效地找到最接近的n個鄰居,理想情況下是測地線(WGS-84)的距離。現(xiàn)在,我使用sklearn的BallTree與半正矢距離(KD-特雷斯只需要minkowskian距離),這是很好的和快速(3-4秒內(nèi)找到最近的5個鄰居在7500個可能的匹配1200個位置),但不準確的我需要。代碼:tree = BallTree(possible_matches[['x', 'y']], leaf_size=2, metric='haversine')distances, indices = tree.query(locations[['x', 'y']], k=5)當我用自定義函數(shù)代替metric(metric=lambda u, v: geopy.distance.geodesic(u, v).miles)時,將花費“不合理的”長時間(在與上述相同的情況下為4分鐘)。據(jù)記載,自定義函數(shù)可能會花費很長時間,但是并不能幫助我解決問題。我看過使用帶有ECEF坐標和歐幾里得距離的KD-Tree,但是我不確定這是否更準確。如何保持當前方法的速度,但提高距離精度?
1 回答

慕容森
TA貢獻1853條經(jīng)驗 獲得超18個贊
指標緩慢的主要原因是它是用Python編寫的,而sklearn中的其他指標是用Cython / C ++ / C編寫的。
因此,例如在此處針對“隨機森林”進行的討論或在此處,您將必須在Cython中實現(xiàn)指標,派生自己的BallTree版本,并在其中包含自定義指標。
添加回答
舉報
0/150
提交
取消