Стоит ли оптимизировать без рабочего решения? Кроме того, вычисление матрицы расстояний по всему набору данных редко бывает быстрым, потому что вы делаете это только один раз - когда вам нужно узнать расстояние между двумя точками, вы просто просматриваете его, оно уже рассчитано.
Так что, если у вас нет места, чтобы начать, вот один. Если вы хотите сделать это в Numpy без необходимости писать какие-либо встроенные фортран или C, это не должно быть проблемой, хотя, возможно, вы захотите включить эту небольшую векторную виртуальную машину под названием " Numberxpr " (доступно на PyPI (тривиально для ввода), который в этом случае дал 5-кратное повышение производительности по сравнению с одним Numpy.
Ниже я вычислил матрицу расстояний для 10000 точек в 2D-пространстве (матрица 10K x 10k, показывающая расстояние между всеми 10k точками). На моем MBP это заняло 59 секунд.
import numpy as NP
import numexpr as NE
# data are points in 2D space (x, y)--obviously, this code can accept data of any dimension
x = NP.random.randint(0, 10, 10000)
y = NP.random.randint(0, 10, 10000)
fnx = lambda q : q - NP.reshape(q, (len(q), 1))
delX = fnx(x)
delY = fnx(y)
dist_mat = NE.evaluate("(delX**2 + delY**2)**0.5")