[Numpy-discussion] finding minimum distance using arrays

Robert Kern robert.kern at gmail.com
Wed Apr 23 02:10:15 EDT 2008


On Wed, Apr 23, 2008 at 1:00 AM, wilson <wilson.t.thompson at gmail.com> wrote:
> hi
>  i wrote a function to find euclidian distance between two vectors and
>  applied it to the rows of a 2d array of floats  as below
>
>
>  from math import sqrt
>  from numpy import array,sum
>
>  def distance(vec1, vec2):
>     return sqrt(sum([(x-y)**2 for x,y in zip(vec1, vec2)]))
>
>  def findmatch(wts,inputwt):
>     mindist=99.0
>     index=0
>     for i in range(len(wts)):
>         d=distance(wts[i],inputwt)
>         if d == 0.0:
>             mindist=d
>             index=i
>             break
>         elif d < mindist:
>             mindist=d
>             index=i
>     return index,mindist
>
>  inputwt is a 1 dim array,wts is a 2d array .i want to find the
>  distance between inputwt and each row of wts...I used mindist=99.0  as
>  an improbable value for distance for  the sample float arrays which i
>  used to test it...
>  i am not sure if this is the proper way to write this function..can
>  someone suggest how i can make it better?

import numpy

def findmatch(wts, inputwts):
    wts = numpy.asarray(wts)
    inputwts = numpy.asarray(wts)
    dx = wts - inputwts
    distances = (dx * dx).sum(axis=1)
    index = distances.argmin()
    mindist = distances[index]
    return index, mindist

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
 -- Umberto Eco



More information about the NumPy-Discussion mailing list