I checked the matlab version's code and it does the same as discussed
here.  The only thing to check is to make sure you loop around the
shorter dimension of the output array. Speedwise the Matlab code still
runs about twice as fast for large sets of data (by just taking time
by hand and comparing), nevetheless the improvement over calculating
each value as in d1 is significant (10-300 times) and enough for my
needs. Thanks to all.

Sebastian Beca

PD: I also tried the d5 version Alex sent but the results are not the
same so I couldn't compare.

My final version was:

K = 10
C = 3
N = 2500 # One could switch around C and N now.
A = random.random( [N, K])
B = random.random( [C, K])

def dist():
    d = zeros([N, C], dtype=float)
    if N < C:
        for i in range(N):
            xy = A[i] - B
            d[i,:] = sqrt(sum(xy**2, axis=1))
        return d
    else:
        for j in range(C):
            xy = A - B[j]
            d[:,j] = sqrt(sum(xy**2, axis=1))
    return d


On 6/17/06, Johannes Loehnert <[EMAIL PROTECTED]> wrote:
> Hi,
>
> > def d4():
> >     d = zeros([4, 1000], dtype=float)
> >     for i in range(4):
> >         xy = A[i] - B
> >         d[i] = sqrt( sum(xy**2, axis=1) )
> >     return d
> >
> > Maybe there's another alternative to d4?
> > Thanks again,
>
> I think this is the fastest you can get. Maybe it would be nicer to use
> the .sum() method instead of sum function, but that is just my personal
> opinion.
>
> I am curious how this compares to the matlab version. :)
>
> Johannes
>
>
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/numpy-discussion
>


_______________________________________________
Numpy-discussion mailing list
Numpy-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/numpy-discussion

Reply via email to