Source code for nipy.algorithms.utils.fast_distance

# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*-
# vi: set ft=python sts=4 ts=4 sw=4 et:
"""
this module contains a function to perform fast distance computation on arrays

Author : Bertrand Thirion, 2008-2011
"""
from __future__ import absolute_import
import numpy as np


[docs]def euclidean_distance(X, Y=None): """ Considering the rows of X (and Y=X) as vectors, compute the distance matrix between each pair of vectors Parameters ---------- X, array of shape (n1,p) Y=None, array of shape (n2,p) if Y==None, then Y=X is used instead Returns ------- ED, array fo shape(n1, n2) with all the pairwise distance """ if Y is None: Y = X if X.shape[1] != Y.shape[1]: raise ValueError("incompatible dimension for X and Y matrices") n1 = X.shape[0] n2 = Y.shape[0] NX = np.reshape(np.sum(X * X, 1), (n1, 1)) NY = np.reshape(np.sum(Y * Y, 1), (1, n2)) ED = np.repeat(NX, n2, 1) ED += np.repeat(NY, n1, 0) ED -= 2 * np.dot(X, Y.T) ED = np.maximum(ED, 0) ED = np.sqrt(ED) return ED