Scipy

2013-07-23 24 views
7

'daki KD ağacı uygulamasına puan eklemek için herhangi bir yol var mı KD Ağacı oluşturmak istediğim bir dizi nokta var. Bir süre sonra periyodik olarak bu KDTree'ye birkaç nokta daha eklemek istiyorum. Scipy uygulamasında bunu yapmak için herhangi bir yolu var mı?Scipy

cevap

10

K-d ağaçları ile ilgili sorun, güncelleştirmeleri için tasarlanmayan olmasıdır.

Nesneleri kolayca ekleyebildiğiniz halde (dizi tabanlı bir ağaçtan önemli ölçüde daha fazla belleğe gereksinim duyan bir işaretçi tabanlı gösterimi kullanıyorsanız) ve mezar taşı iletileri gibi hileli silmeler yaparak, bu değişiklikleri yaptıktan sonra ağacın performansı.

K-d ağacının aşamalı olarak yeniden dengelenmesi için iyi bir yöntemin farkında değilim. 1 boyutlu ağaçlar için kırmızı-siyah ağaçları, B-ağaçları, B * -trees, B + -trees ve benzeri şeyler var. Bunlar, dönen eksenler ve dolayısıyla farklı sıralama nedeniyle açık bir şekilde k-d ağaçları ile çalışmazlar. Sonuç olarak, bir k-d-tree ile, sadece değişiklikleri toplamak en iyisi olabilir ve zaman zaman full tree rebuild. Sonra en azından ağacın bu kısmı oldukça iyi olacak. Bununla birlikte, benzer bir yapı var (benim deneyimlerimde genellikle k-d ağacından daha iyi performans gösteriyor!): R * -tree. İkili bölünmeler yapmak yerine, nesneleri toplamak için dikdörtgen sınırlayıcı kutular kullanır ve ağacı dinamik bir veri yapısı haline getirmek için çok fazla düşünce yapılmıştır. Bu aynı zamanda R * -tree'nin R-tree'den çok daha iyi performans gösterdiği yerdir: kNN araması için çok daha zekice bir bölüme sahiptir ve yapısını geliştirmek için artımlı yeniden dengeleme gerçekleştirir.

+2

Python/Scipy'de herhangi bir R * -tree uygulaması var mı? – heltonbiker

+0

Güncelleştirmede dörtgen daha mı iyi? – user1767754

+1

Python R * -tree: http://toblerity.org/rtree/ – James