используйте numpy.linalg.norm
для вычисления (евклидовых) расстояний, затем numpy.argsort
для сортировки индексов точек по их расстоянию.
import numpy
points = numpy.array([
[1, 0, 3],
[2, 1, 2],
[3, 4, 1],
[1, 0, 3],
[2, 1, 2],
[3, 4, 1]
])
distances = numpy.linalg.norm(points - numpy.array([[1, 1, 1]]), axis=1)
print(distances)
print(numpy.argsort(distances))
Выходные данные
[2.23606798 1.41421356 3.60555128 2.23606798 1.41421356 3.60555128]
[1 4 0 3 2 5]
В первой строке перечислены евклидовы расстояния каждой точки в списке до контрольной точки. Во второй строке приведены индексы точек, отсортированные по их расстоянию: ближайшая точка - 1, вторая - ближайшая точка 4, третья - ближайшая точка 0, ...