2012-03-21 13 views
5

Motivazione:

Ho visto questo algoritmo descritto e preferirei non reinventare la ruota se esiste un'implementazione standard. Ho anche imparato che se c'è un'implementazione di scipy/numpy, di solito è molto più veloce di qualsiasi cosa riesca a ottenere da solo in python.Nome di questo algoritmo e c'è un'implementazione numpy/scipy di questo algoritmo?

Algoritmo Descrizione

Ho un gran numero di punti sul piano (diversi milioni). A partire da una grande scatola che comprende tutti i punti, mi piacerebbe suddividere continuamente la scatola in sotto-caselle di uguale area. La suddivisione continua in modo ricorsivo mentre ci sono almeno 1.000 punti nella sottocasella. L'algoritmo restituisce un albero che descrive le suddivisioni e la mappatura dei punti su ciascun nodo foglia dell'albero.

Qual è il nome di questo algoritmo (qualcosa come divide e conquista?), E c'è un metodo standard per farlo quando viene assegnato un array di punti numerico 2D?

+1

intendi quad-tree? –

+0

Se la suddivisione in una dimensione è un albero N-kD (per N = 2). Anche la scissione dovrebbe essere fatta in modo tale che le dimensioni * delle popolazioni * delle due parti siano (circa) uguali. – wildplasser

+0

@wildplasser da un punto di vista computazionale, sarei d'accordo con te sulla suddivisione lungo popolazioni di uguali dimensioni (per profondità minima dell'albero). Tuttavia, sto cercando di replicare i risultati di un foglio in cui fanno esattamente come dico, una scissione di pari livello. – Hooked

risposta

9

Si chiama una partizione quadtree. Per quanto riguarda il codice Python, vedere this thread.

+6

Solo per quello che vale, 'scipy .spatial.KDTree' (e/o 'scipy.spatial.cKDTree', che è scritto in C per motivi di prestazioni) è una scelta molto più robusta rispetto alle opzioni elencate nella discussione che hai collegato, imo –

+0

@JoeKington - Buono a sapersi. Qualcosa da scipy è probabilmente meglio per OP comunque, dati i tag. –

Problemi correlati