2013-01-13 36 views
5

Obecnie szukam sposobu na zbudowanie kilku drzew kd do szybkiego wysyłania zapytań o niektóre dane n-wymiarowe. Jednak mam pewien problem z algorytmem drzewa scipy KDscipy kdtree z metadanych

Moje dane składa id -> {data: somedata, coordinate: x, y}

Chcę móc kwerendy bazy na współrzędnych i K-Najbliższa identyfikatory sąsiada, a także coraz poprawkę promień neghbour's id. Sądząc po scipy implementacji KDTree i cKDtree, nie jest to możliwe.

Moje inne opcje to pisanie własnego drzewa KD, które nie będzie takie wspaniałe, bo jestem po prostu mną, czy ...?

Odpowiedz

4

Z zabawy z KDTree, wygląda na to, że nalega na posiadanie tablicy 2D typu numpy, jak podano obiektowi konstruktorowi, ale API zwraca indeksy do tej tablicy. Co więcej, nie można po prostu małpować poprawiania danych na indywidualne współrzędne.

Ale nadal możesz skorzystać z odwagi KDTree. Musisz podzielić obiekt na równoległą listę dołączonych obiektów danych i tablicę numpy ze współrzędnymi, które widzi KDTree. Kiedy to powie, zwraca trzeci punkt dla jakiegoś wyszukiwania, wiesz, że odpowiada trzeciemu indeksowi na twojej dołączonej liście obiektów danych.

Oczywiście, jest to bardziej niezręczne niż API, które daje kluczową funkcję, która daje współrzędne z dowolnego obiektu, podobnie jak można przekazać klucz do funkcji sortowania Pythona, ale jest o wiele lepsza niż wdrażanie własnej implementacji KDTree .

+0

Awesome! Wygląda na to, że trochę źle zrozumiałem dokumentację. Wszystko dobrze teraz – Pwnna