私は2次元配列を持っています:
MyArray = array([6588252.24, 1933573.3, 212.79, 0, 0],
[6588253.79, 1933602.89, 212.66, 0, 0],
etc...)
最初の2つの要素MyArray[0]
およびMyArray[1]
は[〜#〜] x [〜#〜]と[〜#〜] y [ 〜#〜]ポイントの座標。
配列内のすべての要素について、半径が[〜#〜] x [〜#の単一の最近傍を返す最速方法を見つけたいと思います〜]単位。これは2D空間にあると想定しています。
この例ではX = 6
。
すべての要素を他のすべての要素と比較することで問題を解決しましたが、リストが22kポイントの長さの場合、これには15分ほどかかります。最終的には、これを約3,000万ポイントのリストで実行したいと考えています。
私はK-dツリーについて読んで基本的な概念を理解しましたが、それらをスクリプト化する方法を理解するのに苦労しました。
Scipyを提案してくれたJohn Vinyardに感謝します。いくつかの良い研究とテストの後、これがこの質問の解決策です:
前提条件:NumpyとSciPyをインストールする
SciPyおよびNumpyモジュールをインポートする
X値とY値をjustを含む5次元配列のコピーを作成します。
cKDTree
のインスタンスを次のように作成します。
YourTreeName = scipy.spatial.cKDTree(YourArray, leafsize=100)
#Play with the leafsize to get the fastest result for your dataset
cKDTree
に、6ユニット以内の最近傍のクエリを実行します。
for item in YourArray:
TheResult = YourTreeName.query(item, k=1, distance_upper_bound=6)
YourArray
の各アイテムの場合、TheResult
は2つのポイント間の距離のタプル、およびYourArray
のポイントの場所のインデックスになります。