/ / Python Numpy efficient Distanza euclidea polare - pitone, numpy, matrice, vettorizzazione, distanza euclidea

Python Numpy efficient Distanza euclidea polare - pitone, numpy, matrice, vettorizzazione, distanza euclidea

Ho una lista di n coordinate polari e una funzione di distanza che prende due coordinate.

Voglio creare una matrice n x n che contenga le distanze a coppie sotto la mia funzione. Mi rendo conto che probabilmente ho bisogno di usare qualche forma di vettorizzazione con numpy ma non sono sicuro di come farlo.

risposte:

0 per risposta № 1

Un semplice segmento di codice è sotto per il tuo riferimento

import numpy as np

length = 10

coord_r = np.random.rand(length)*10
coord_alpha = np.random.rand(length)*np.pi

# Repeat vector to matrix form
coord_r_X = np.tile(coord_r, [length,1])
coord_r_Y = coord_r_X.T
coord_alpha_X = np.tile(coord_alpha, [length,1])
coord_alpha_Y = coord_alpha_X.T

matDistance = np.sqrt(coord_r_X**2 + coord_r_Y**2 - 2*coord_r_X*coord_r_Y*np.cos(coord_alpha_X - coord_alpha_Y))
print matDistance

0 per risposta № 2

Puoi usare scipy.spatial.distance.pdist. Tuttavia, se la distanza che vuoi calcolare è la distanza euclidea, potresti stare meglio convertendo i tuoi punti in coordinate rettangolari, da allora pdist farà i calcoli abbastanza rapidamente usando la sua distanza Euclidea costruita.