Cálculo eficiente de una matriz de distancia euclidiana usando Numpy

Tengo un conjunto de puntos en un espacio bidimensional y necesito calcular la distancia de cada punto a otro punto.

Tengo un número relativamente pequeño de puntos, tal vez un máximo de 100. Pero como necesito hacerlo a menudo y rápidamente para determinar las relaciones entre estos puntos móviles, y dado que soy consciente de que recorrer los puntos podría ser tan malo Como O (n ^ 2) complejidad, estoy buscando formas de aprovechar la magia de matriz de Numpy (o scipy).

Tal como está en mi código, las coordenadas de cada objeto se almacenan en su clase. Sin embargo, también podría actualizarlos en una matriz numpy cuando actualizo la coordenada de clase.

class Cell(object):
    """Represents one object in the field."""
    def __init__(self,id,x=0,y=0):
        self.m_id = id
        self.m_x = x
        self.m_y = y

Se me ocurre crear una matriz de distancia euclidiana para evitar la duplicación, pero quizás tenga una estructura de datos más inteligente.

Estoy abierto a los punteros a algoritmos ingeniosos también.

Además, noto que hay preguntas similares relacionadas con la distancia euclidiana y numpy, pero no encontré ninguna que aborde directamente esta cuestión de poblar eficientemente una matriz de distancia completa.

Respuestas a la pregunta(4)

Su respuesta a la pregunta