[Numpy-discussion] distance matrix speed (original) (raw)

Johannes Loehnert a.u.r.e.l.i.a.n at gmx.net
Fri Jun 16 02:28:18 EDT 2006


Hi,

def dtest():     A = random( [4,2])     B = random( [1000,2])

# drawback: memory usage temporarily doubled
# solution see below
d = A[:, newaxis, :] - B[newaxis, :, :]
# written as 3 expressions for more clarity
d = sqrt((d**2).sum(axis=2))
return d

def dtest_lowmem(): A = random( [4,2]) B = random( [1000,2])

d = zeros([4, 1000], dtype='f')  # stores result
for i in range(len(A)):
    # the loop should not impose much loss in speed
    dtemp = A[i, newaxis, :] - B[:, :]
    dtemp = sqrt((dtemp**2).sum(axis=1))
    d[i] = dtemp
return d

(both functions untested....)

HTH, Johannes



More information about the NumPy-Discussion mailing list