0

私はこのような2つの要素を持つリストを持っています:

list_a = [27.666521, 85.437447]

そしてこのような別のリスト:

big_list = [[27.666519, 85.437477], [27.666460, 85.437622], ...]

list_aそして、内で最も近いものを見つけたいと思いますlist_b

たとえば、ここで最も近い一致はです[27.666519, 85.437477]

どうすればこれを達成できますか?

配列内の文字列の最も近い一致を見つけるためにここで同様の問題を見つけましたが、上記の問題について同様に再現することはできませんでした。

PSリスト内の要素は、地球上の点の座標です。

4

2 に答える 2

10

あなたの質問から、あなたが距離をどのように測定したいかを言うのは難しいので、私はあなたがユークリッド距離を意味していると単純に仮定します。

keyこのパラメータを使用して、次のことができますmin()

from functools import partial

def distance_squared(x, y):
    return (x[0] - y[0])**2 + (x[1] - y[1])**2

print min(big_list, key=partial(distance_squared, list_a))
于 2012-07-24T11:40:50.830 に答える
1

仮定:

  • 同じリストのリストでこのタイプのクエリを複数回実行する予定です
  • クエリリストとリストリスト内のリストはどちらも、n次元のユークリッド空間(ここでは、球形の空間からのGPS位置とは異なり、2次元の空間)の点を表します。

これは、最近傍探索のようになります。おそらく、 scikits.annのように、これ専用のライブラリを考慮する必要があります。

例:

import scikits.ann as ann
import numpy as np
k = ann.kdtree(np.array(big_list))
indices, distances = k.knn(list_a, 1)

これは、内部でユークリッド距離を使用します。適用する距離測度が近接性の概念に準拠していることを確認する必要があります。

また、Quadtreeも確認することをお勧めします。これは、リストのリスト全体を強引に検索することを回避するために適用できるもう1つのデータ構造です。

于 2012-07-24T11:50:43.290 に答える