Есть ли разница в точности в методах python для расчета евклидова расстояния? - PullRequest
1 голос
/ 29 января 2020

Я вычисляю массив евклидовых расстояний по массиву в массиве numpy. Я использовал np.linalg.norm(v1-v2) для этого. Поскольку я планировал использовать другие меры расстояния, я изменил это значение на scipy.spatial.distance.euclidean(v1,v2), чтобы сохранить шаблон в моем коде.

Я заметил, что последние цифры немного отличаются в каждом сценарии. Я полагаю, что это не так, поскольку в scipy евклидовой версии используются функции из numpy core, такие как dot и sqrt. В Python я попробовал другие способы вычисления евклидова расстояния для сравнения, и для конкретного c примера я получил эти результаты.

>>> math.sqrt(sum([(a-b)**2 for a,b in zip(v1,v2)]))
1.0065822095995844
>>> numpy.linalg.norm(v1-v2)
1.0065822095995838
>>> sklearn.metrics.pairwise.euclidean_distances(v1.reshape(1,-1),v2.reshape(1,-1))[0,0]
1.0065822095995838
>>> scipy.spatial.distance.euclidean(v1,v2)
1.006582209599584  

Просто для записи, в моих примерах v1 и v2 - это нормализованные гистограммы.
Почему эта разница в точности? Должно ли это случиться?

...