Как рассчитать евклидово расстояние в Python (с примерами)


Евклидово расстояние между двумя векторами, A и B, рассчитывается как:

Евклидово расстояние = √ Σ(A i -B i ) 2

Чтобы вычислить евклидово расстояние между двумя векторами в Python, мы можем использовать функцию numpy.linalg.norm :

#import functions
import numpy as np
from numpy. linalg import norm

#define two vectors
a = np.array([2, 6, 7, 7, 5, 13, 14, 17, 11, 8])
b = np.array([3, 5, 5, 3, 7, 12, 13, 19, 22, 7])

#calculate Euclidean distance between the two vectors 
norm(a-b)

12.409673645990857

Евклидово расстояние между двумя векторами оказывается равным 12,40967 .

Обратите внимание, что эта функция выдаст предупреждающее сообщение, если два вектора имеют разную длину:

#import functions
import numpy as np
from numpy. linalg import norm

#define two vectors
a = np.array([2, 6, 7, 7, 5, 13, 14])
b = np.array([3, 5, 5, 3, 7, 12, 13, 19, 22, 7])

#calculate Euclidean distance between the two vectors 
norm(a-b)

ValueError : operands could not be broadcast together with shapes (7,) (10,)

Обратите внимание, что мы также можем использовать эту функцию для вычисления евклидова расстояния между двумя столбцами кадра данных pandas:

#import functions
import pandas as pd 
import numpy as np
from numpy. linalg import norm

#define DataFrame with three columns
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
 'assists': [5, 7, 7, 9, 12, 9, 9, 4],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})

#calculate Euclidean distance between 'points' and 'assists' 
norm(df['points'] - df['assists'])

40.496913462633174

Евклидово расстояние между двумя столбцами оказывается равным 40,49691 .

Заметки

1. Существует несколько способов вычисления евклидова расстояния в Python, но, как объясняется в этой ветке Stack Overflow , описанный здесь метод оказывается самым быстрым.

2. Полную документацию по функции numpy.linalg.norm вы можете найти здесь .

3. Вы можете обратиться к этой странице Википедии, чтобы узнать больше о евклидовом расстоянии.