2017-09-01 1 views
3

と1つのグループ内の座標の近さを確認I座標の二つのグループがあります

  1. {(x1,y1),..(xn,yn)}
  2. {(w1,z1),..(wn,zn)}

およびIは対にグループ2の各ペアが一致したいですそれが最も近いグループ1にある。私のグループは大規模なので、効率的な検索が必要です。 これを設定するためのアドバイスをいただければ幸いです。さらに、グループ1 = {(x1,y1,z1),..(xn,yn,zn)}、グループ2 = {(u1,v1, w1),..(un,vn,wn)}の2つのグループがある場合は、どうすればよいですか?また、私のグループが大きすぎてコンピュータに保存することができないことを考慮すると、この問題を解決するための提案は高く評価されます。

+2

私は、すべての組み合わせの距離を計算し、最小のものをチェックするよりもはるかに優れているとは思いません。 これは、 'n'個のオブジェクトに対してそれぞれ' n'回の距離を計算する必要があるため、距離を得るために 'n^2'の計算が必要になります。データセットが本当に巨大であれば、基本的に数千年後の計算を忘れることができます。 – Zinki

+0

あなたはすでにポイントの範囲と分布について何を知っていますか? – Prune

+0

@Pruneこんにちは - 特に座標の範囲と分布については何も知られていません。効率的な探索アルゴリズムは、ユーザが指定したnの値に対して機能するはずです。そして、非常に大きなデータセットを扱う方法。これのための実用的な例を感謝します。ありがとう。 – user2468702

答えて

4

KDTreeを使用できます。このアルゴリズムを使用すると、最も近い近隣を効率的に検索し、比較回数を大幅に減らすことができます。 「KD」は「k次元」の略で、任意の次元数(最後の質問に答えるため)でデータに取り組むことができます。

リストの1つを使用してツリーを構築し、最も近い要素の別のリストクエリの各要素に対してツリーを構築できます。 Scipyはimplementation for ktreesを提供します。

+0

お返事ありがとうございます。あなたは、サイズnの任意の座標に一般化できる最小の実用的な例を与えることができますか?私のフォローアップの質問に対するアドバイスもありますか? – user2468702

+0

あなたのためにいくつかのコードを書きたいと思うようです。多くのユーザーは、苦痛を伴うコーダーのコードを作成したいと考えていますが、通常、ポスターがすでに自分で問題を解決しようとしたときにのみ役立ちます。この努力を示す良い方法は、[最小で完全で検証可能な例](http://stackoverflow.com/help/mcve)を含めることです。 [イントロツアー](https://stackoverflow.com/tour)、特に[How to Ask](http://stackoverflow.com/help/how-to-ask)を確認してください。 – Prune