Поиск ближайших точек путем их ранжирования

У меня есть N x D размерные объекты, которые мне нужно ранжировать в соответствии с их расстоянием до 1 x D размерного вектора. Есть ли быстрый способ реализовать это в python без рекурсивного применения argmin?

Спасибо!


person JustInTime    schedule 20.06.2011    source источник
comment
Посмотрите на проблему с ближайшей парой точек   -  person inspectorG4dget    schedule 20.06.2011


Ответы (1)


Что-то очень простое — это Квадрат евклидова расстояния, и его реализация будет выглядеть так:

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])

Где F — объекты, а t — целевой вектор. Таким образом, рейтинг будет таким:

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

Однако, если вы можете более подробно описать свой случай, могут существовать более подходящие меры, такие как расстояние Махаланобиса.

person eat    schedule 20.06.2011
comment
@unutbu: Очевидно, вы редактировали, но я не вижу разницы. Что это были за 29 удаленных символов? Спасибо - person eat; 20.06.2011
comment
Я ожидал, что матрица будет варьироваться от 1 до 5 в зависимости от того, насколько близка каждая точка к t. Это не то, что я точно ищу. - person JustInTime; 20.06.2011
comment
@eat: Извините, я должен был оставить заметку о том, что я сделал. Ссылка (что-то вроде: http://en.wikipedia.org/wiki/http://en.wikipedia.org/wiki/Mahalanobis_distance) не работает. - person unutbu; 20.06.2011
comment
@Abdalrahman Eweiwi: в Python индексы начинаются с 0, поэтому в этом случае argsort(.) предоставит то, что вы ищете, например ((F- t)** 2).sum(1).argsort(). Спасибо - person eat; 20.06.2011
comment
@Abdalrahman Eweiwi: Вы нашли мой ответ полезным? Если нет, пожалуйста, рассмотрите возможность более подробно рассказать о своем случае, потому что мой ответ AFAIUIC дает ранжирование, которое вы искали. Спасибо - person eat; 22.06.2011