Я вычисляю массив евклидовых расстояний по массиву в массиве 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 - это нормализованные гистограммы.
Почему эта разница в точности? Должно ли это случиться?