[Numpy-discussion] distance matrix speed

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