vectores una sumar restar producto norma matriz matrices determinante con como aumentada python vector numpy scipy euclidean-distance

una - Cálculo de la distancia euclidiana de Python Numpy entre matrices de vectores de fila



sumar dos matrices numpy (5)

Soy nuevo en Numpy y me gustaría preguntarle cómo calcular la distancia euclidiana entre los puntos almacenados en un vector.

Supongamos que tenemos un numpy.array cada fila es un vector y un solo numpy.array. Me gustaría saber si es posible calcular la distancia euclidiana entre todos los puntos y este único punto y almacenarlos en un solo número.

Aquí hay una interfaz:

points #2d list of row-vectors singlePoint #one row-vector listOfDistances= procedure( points,singlePoint)

¿Podemos tener algo como esto? ¿O es posible tener un comando para tener el único punto como una lista de otros puntos y al final obtenemos una matriz de distancias?

Gracias


Para aplicar una función a cada elemento de una matriz numpy, intente numpy.vectorize .

Para hacer el cálculo real, necesitamos la raíz cuadrada de la suma de los cuadrados de diferencias (¡qué!) Entre pares de coordenadas en los dos vectores.

Podemos usar zip para emparejar las coordenadas y sum con una comprensión para resumir los resultados. Eso parece como:

sum((x - y) ** 2 for (x, y) in zip(singlePoint, pointFromArray)) ** 0.5


Para obtener la distancia, puede utilizar el método normal del módulo linalg en numpy:

np.linalg.norm(x - y)


Si bien puedes usar vectorizar, el enfoque de @ Karl será bastante lento con matrices numpy.

El enfoque más fácil es simplemente hacer np.hypot(*(points - single_point).T) . (La transposición supone que los puntos son una matriz Nx2, en lugar de 2xN. Si es 2xN, no necesita la .T .

Sin embargo, esto es un poco ilegible, así que lo escribes más explícitamente de esta manera (utilizando algunos datos de ejemplo enlatados ...):

import numpy as np single_point = [3, 4] points = np.arange(20).reshape((10,2)) dist = (points - single_point)**2 dist = np.sum(dist, axis=1) dist = np.sqrt(dist)


import numpy as np def distance(v1, v2): return np.sqrt(np.sum((v1 - v2) ** 2))


import numpy as np single_point = [3, 4] points = np.arange(20).reshape((10,2)) distance = euclid_dist(single_point,points) def euclid_dist(t1, t2): return np.sqrt(((t1-t2)**2).sum(axis = 1))