Как рассчитать евклидово расстояние с помощью NumPy?

По большей части количество байтов и диапазон значений определяется архитектурой процессора не C ++. Тем не менее, C ++ устанавливает минимальные требования, которые подробно описаны в litb, и Мартин Йорк сделал несколько ошибок.

Причина, по которой вы не можете использовать int и long взаимозаменяемо, состоит в том, что они не всегда одинаковы , C был изобретен на PDP-11, где байт имел 8 бит, int был двумя байтами и мог обрабатываться непосредственно аппаратными инструкциями. Поскольку программистам C часто нужна четырехбайтная арифметика, давно изобретено, и это было четыре байта, обработанные библиотечными функциями. Другие машины имели разные спецификации. Стандарт C наложил некоторые минимальные требования.

440
задан Peter Mortensen 26 June 2018 в 20:26
поделиться

3 ответа

Используйте numpy.linalg.norm :

dist = numpy.linalg.norm(a-b)

Теория, лежащая в основе этого: как описано в Introduction to Data Mining

] Это работает, потому что Евклидово расстояние равно l2 norm , а значение параметра ord в numpy.linalg.norm по умолчанию равно 2.

enter image description here

781
ответ дан 22 November 2019 в 22:55
поделиться

Начиная с Python 3.8

Начиная с Python 3.8 math модуль включает функцию math.dist().
Посмотрите здесь https://docs.python.org/3.8/library/math.html#math.dist.

math.dist (p1, p2)
Возврат Евклидово расстояние между двумя точками p1 и p2, каждый данный как последовательность (или повторяемый) координат.

import math
print( math.dist( (0,0),   (1,1)   )) # sqrt(2) -> 1.4142
print( math.dist( (0,0,0), (1,1,1) )) # sqrt(3) -> 1.7321
2
ответ дан 22 November 2019 в 22:55
поделиться

Другой пример этого метода решения проблемы :

def dist(x,y):   
    return numpy.sqrt(numpy.sum((x-y)**2))

a = numpy.array((xa,ya,za))
b = numpy.array((xb,yb,zb))
dist_a_b = dist(a,b)
33
ответ дан 22 November 2019 в 22:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: