Вы также можете использовать разработку нормы (аналогично замечательным тождествам). Это, вероятно, самый эффективный способ вычисления расстояния матрицы точек.
Вот фрагмент кода, который я первоначально использовал для реализации k-Nearest-Neighbours в Octave, но вы можете легко адаптировать его к numpy, поскольку он использует только умножения матриц (эквивалент numpy.dot ()): 1003 *
% Computing the euclidian distance between each known point (Xapp) and unknown points (Xtest)
% Note: we use the development of the norm just like a remarkable identity:
% ||x1 - x2||^2 = ||x1||^2 + ||x2||^2 - 2*<x1,x2>
[napp, d] = size(Xapp);
[ntest, d] = size(Xtest);
A = sum(Xapp.^2, 2);
A = repmat(A, 1, ntest);
B = sum(Xtest.^2, 2);
B = repmat(B', napp, 1);
C = Xapp*Xtest';
dist = A+B-2.*C;