KristofferC/NearestNeighbors.jl

High performance nearest neighbor data structures (KDTree and BallTree) and algorithms for Julia.

解決する問題

NearestNeighbors.jl は、データセット内の最も近い点を効率的に見つける方法を提供します。これは、多くの科学シミュレーションや機械学習タスクにとって基本的な操作です。このパッケージは、数百万の点を検索する際に、すべての点を他のすべての点と比較する(ブルートフォース)という、大規模データセットでは遅すぎる方法を回避するという課題に対処します。

仕組み

このパッケージは、「ツリー」と呼ばれるいくつかの空間分割構造を実装しており、データポイントを領域の階層に整理します:

  • KDTree: 軸に平行な平面を使用してデータを分割します。低次元データに最適です。
  • BallTree: 超球を使用してポイントをグループ化するため、高次元やカスタム距離メトリックに適しています。
  • BruteTree: ベースラインとして使用される単純な線形検索です。
  • PeriodicTree: 定義された境界の端を「ラップアラウンド」する検索を可能にするラッパーで、物理シミュレーションに重要です。

ツリーの並列構築をサポートしてセットアップ時間を短縮し、データが頻繁に更新される場合にメモリを再利用するための変更可能なコンストラクタ(KDTree! など)を提供します。

対象ユーザー

このツールは、多次元空間で高速なk最近傍(kNN)または範囲検索を実行する必要があるJuliaユーザーの研究者や開発者向けに設計されています。

ハイライト

  • 複数のツリータイプ: データの次元性とメトリックに基づいて、KDツリーとボールツリーを選択できます。
  • 周期境界: PeriodicTree による周期ドメインの組み込みサポート。
  • メモリ効率: オンディスクメモリマッピングを使用して、利用可能なRAMよりも大きなデータセットを処理するための DataFreeTree が含まれています。
  • 高性能: マルチスレッドのツリー構築をサポートし、デバッグと可視化のための最適化されたツリートラバーサルウォーカーを提供します。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト