Znajdowanie najbliższego punktu (punktów) poprzez ich ranking

Mam elementy wymiarowe N x D, które muszę uszeregować zgodnie z ich odległością do wektora wymiarowego 1 x D. Jakiś szybki sposób na zaimplementowanie tego w Pythonie bez rekurencyjnego stosowania argmin?

Dziękuję!


person JustInTime    schedule 20.06.2011    source źródło
comment
Spójrz na najbliższy problem z parą punktów   -  person inspectorG4dget    schedule 20.06.2011


Odpowiedzi (1)


Coś naprawdę prostego to Kwadratowa odległość euklidesowa, a jej implementacja wyglądałaby następująco:

In []: F= randn(5, 3)
In []: t= randn(1, 3)
In []: ((F- t)** 2).sum(1)
Out[]: array([  8.80512,   4.61693,   2.6002,   3.3293,  12.41800])

Gdzie F to cechy, a t wektor docelowy. W ten sposób ranking będzie wyglądał następująco:

In []: ((F- t)** 2).sum(1).argsort()
Out[]: array([2, 3, 1, 0, 4])

Jeśli jednak jesteś w stanie opisać więcej w swoim przypadku, mogą istnieć bardziej odpowiednie środki, takie jak odległość Mahalanobisa.

person eat    schedule 20.06.2011
comment
@unutbu: Najwyraźniej edytowałeś, ale nie widzę różnicy. Co to było za 29 usuniętych postaci? Dziękuję - person eat; 20.06.2011
comment
Oczekiwałem, że macierz mieści się w zakresie od 1 do 5, w zależności od tego, jak blisko każdego punktu z t. Nie tego dokładnie szukam. - person JustInTime; 20.06.2011
comment
@eat: Przepraszam, powinienem był zostawić notatkę o tym, co zrobiłem. Link (coś w stylu: http://en.wikipedia.org/wiki/http://en.wikipedia.org/wiki/Mahalanobis_distance) został uszkodzony. - person unutbu; 20.06.2011
comment
@Abdalrahman Eweiwi: W Python indeksy zaczynają się od 0, więc w tym przypadku argsort(.) zapewni to, czego szukasz, na przykład ((F- t)** 2).sum(1).argsort(). Dziękuję - person eat; 20.06.2011
comment
@Abdalrahman Eweiwi: Czy moja odpowiedź mimo wszystko była przydatna? Jeśli nie, rozważ rozwinięcie sprawy bardziej szczegółowo, ponieważ moja odpowiedź AFAUIIC zapewnia ranking, którego szukałeś. Dziękuję - person eat; 22.06.2011