A - точка, а P - список точек. Я хочу, чтобы выяснить, какие точки Р [я] является наиболее близким к А, то есть я хочу найти P[i_0]
с:Найти ближайшего соседа по более pythonic пути
i_0 = argmin_i || A - P[i]||^2
я сделать это таким образом:
import numpy as np
# P is a list of 4 points
P = [np.array([-1, 0, 7, 3]), np.array([5, -2, 8, 1]), np.array([0, 2, -3, 4]), np.array([-9, 11, 3, 4])]
A = np.array([1, 2, 3, 4])
distance = 1000000000 # better would be : +infinity
closest = None
for p in P:
delta = sum((p - A)**2)
if delta < distance:
distance = delta
closest = p
print closest # the closest point to A among all the points in P
Он работает, но как это сделать короче/более путинским?
В целом в Python (и даже без использования Numpy) как найти k_0 такие, что D[k_0] = min D[k]
? т.е. k_0 = argmin_k D[k]
У вас есть SciPy? [Структура данных, специально разработанная для поиска ближайшего соседа, вероятно, будет работать лучше, чем любое решение на основе массивов.] (Http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.spatial. cKDTree.html) – user2357112
@ user2357112 Я знаю, что многие модули реализуют поиск ближайших соседей, но для этого примера я хотел бы сам его закодировать (без оптимизации производительности, но только с более коротким кодом). Мой вопрос заключается в том, как правильно реализовать «argmin» в Python. – Basj
Подробнее Pythonic! = Более короткий код. – user2357112