Como calcular a distância euclidiana em python (com exemplos)


A distância euclidiana entre dois vetores A e B é calculada da seguinte forma:

Distância euclidiana = √ Σ(A i -B i ) 2

Para calcular a distância euclidiana entre dois vetores em Python, podemos usar a função 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(ab)

12.409673645990857

A distância euclidiana entre os dois vetores é 12,40967 .

Observe que esta função produzirá uma mensagem de aviso se os dois vetores não tiverem o mesmo comprimento:

 #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(ab)

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

Observe que também podemos usar esta função para calcular a distância euclidiana entre duas colunas de um DataFrame do 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

A distância euclidiana entre as duas colunas é 40,49691 .

Comentários

1. Existem várias maneiras de calcular a distância euclidiana em Python, mas como explica este tópico do Stack Overflow , o método explicado aqui acaba sendo o mais rápido.

2. Você pode encontrar a documentação completa da função numpy.linalg.norm aqui .

3. Você pode consultar esta página da Wikipedia para saber mais sobre a distância euclidiana.

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *