2

~1M 行の配列 A と ~400K 行の配列 B の 2 つの配列があります。それぞれには、特にポイントの座標が含まれています。配列 A の各点について、配列 B の点の数が配列 A から一定の距離内にあることを確認する必要があります。すべてのものとすべてのものを単純に比較しないようにするにはどうすればよいですか? 最初の速度に基づいて、単純に実行すると、私のマシンで 10 日以上かかります。これにはネストされたループが必要でしたが、配列が大きすぎて距離行列を構築できません(400G エントリ!)

各 A 座標に対して B 座標の限られたセットのみをチェックする方法だと思いました。しかし、私はそれを行う簡単な方法を決定していません。つまり、B のすべての値をチェックする必要のない選択を行うための最も簡単で迅速な方法は何ですか (これは、私が避けようとしているのとまったく同じタスクです)。

編集:これらは2D(またはnD)デカルトではなく、球面(緯度/経度)であり、距離は大円距離であることに言及する必要がありました。

4

2 に答える 2

1

今は完全な答えを出すことはできませんが、始めるためのヒントがいくつかあります。Bkd ツリーでポイントを整理する方がはるかに効率的です。クラスscipy.spatial.KDTreeを使用してこれを簡単に行うことができ、query()このクラスのメソッドを使用して、特定の距離内のポイントを要求できます。

于 2012-08-01T18:43:48.560 に答える
0

これは、kd ツリーを使用した球上の点のリスト間のクロス マッチの可能な実装の 1 つです。 http://code.google.com/p/astrolibpy/source/browse/my_utils/match_lists.py

もう 1 つの方法は、healpy モジュールとその get_neighbors メソッドを使用することです。

于 2013-05-12T17:14:54.820 に答える