Scipy(http://www.scipy.org/)は2つのKDツリークラスを提供します。KDTreeとcKDTree。
cKDTreeははるかに高速ですが、KDTreeよりもカスタマイズやクエリが可能ではありません(ドキュメントからわかる限り)。
ここに私の問題があります: 私は300万の2次元(X、Y)ポイントのリストを持っています。すべてのポイントからX単位の距離内にあるすべてのポイントを返す必要があります。
KDtreeには、これを行うためのオプションがありKDtree.query_ball_tree()
ます。Xユニット内のすべてのポイントのリストを他のすべてのポイントから生成します。ただし、このリストは膨大で、すぐに私の仮想メモリをいっぱいにします(約7億4400万アイテムの長さ)。
考えられる解決策#1:書き込み中にこのリストをテキストファイルに解析する方法はありますか?
考えられる解決策#2: forループ(リスト内のすべてのポイント)を使用して、次を使用してXユニット内のその単一ポイントの隣接を見つけようとしましたKDtree.query_ball_point()
。ただし、クエリを何百万回も実行する必要があるため、これには永遠に時間がかかります。このKDTreeツールに相当するcKDTreeはありますか?
考えられる解決策#3:私を打ち負かします、他の誰かが何かアイデアを持っていますか?