2012-03-21 20 views
5

Motivasyon:

Açıklanan bu algoritmayı gördüm ve standart bir uygulama varsa, tekerleği yeniden icat etmemeyi tercih ediyorum. Ayrıca, bir scipy/numpy uygulaması varsa, genellikle kendimi python'da taşıyabileceğim her şeyden çok daha hızlı olduğunu öğrendim. Uçakta noktaları büyük sayıda Bu algoritmanın adı ve bir numpy/scipy uygulaması var mı?

Algoritma Açıklama (birkaç milyon). Tüm noktaları kapsayan büyük bir kutudan başlayarak, kutuyu sürekli alan alt kutularına ayırmak istiyorum. Alt kutu, alt kutuda en az 1.000 nokta bulunurken yinelemeli olarak devam eder. Algoritma, alt bölümleri ve ağacın her yaprak düğümüne noktaların eşleştirilmesini açıklayan bir ağaç döndürür.

Bu algoritmanın adı nedir (bölme ve fethetme gibi bir şey?) Ve 2B sayısal nokta dizisi verildiğinde bunu yapmak için standart bir yöntem var mı?

+1

Quad-tree mı demek istediniz? –

+0

Bir boyutta ayırma, bir N-kD ağacıdır (N = 2 için). Ayrıştırma, iki parçanın popülasyonlarının * boyutlarının (yaklaşık) eşit olacağı şekilde yapılmalıdır. – wildplasser

+0

@wildplasser hesaplamalı bir bakış açısından, size eşit büyüklükte nüfuslar (minimum ağaç derinliği için) boyunca bölünmüş hakkında size katılıyorum. Bununla birlikte, tam olarak söylediğim gibi bir makalenin sonuçlarını eşitlemeye çalışıyorum, eşit bir _areas_. – Hooked

cevap

9

quadtree bölümü denir. Python koduyla ilgili olarak, bkz. this thread.

+6

Sadece ne için olursa olsun, "scipy" .spatial.KDTree (ve/veya scipy.spatial.cKDTree, performans açısından C dilinde yazılmıştır), bağlandığınız dizide listelenen seçeneklerden çok daha sağlam bir seçimdir. –

+0

@JoeKington - Bilmekte fayda var. Etiketler göz önüne alındığında, scipy bir şey muhtemelen OP için muhtemelen daha iyidir. –

İlgili konular