[Scilab-users] Pairwise distance of a huge amount of points

Dang, Christophe Christophe.Dang at sidel.com
Thu Aug 28 16:22:09 CEST 2014


Hello,

I need to compute the pairwise distance of a huge amount of points, namely n = 49545.

I re-read a previous discussion
http://mailinglists.scilab.org/Plot-overlays-on-images-tp2617675p4030599.html

So, I'm trying yo avoid loops,
but I need then at least to have a vectors, or sparse matrices, containing n*(n+1)/2 elements,
i.e. 1.227D+09, which of course exceeds the maximum stacksize.

Any hint?

FYI, three vectors of size n called X0, Y0 and Z0,
the following procedure works well for small vectors
(I tried with n = 1000)

// ********** 
n = size(X0, "r"); // amount of points

uns = sparse(triu(ones(n, n))); // sparse upper triangle matrix of ones

Xd = meshgrid(X0).*uns;
Yd = meshgrid(Y0).*uns;
Zd = meshgrid(Z0).*uns;
Xf = meshgrid(X0)'.*uns;
Yf = meshgrid(Y0)'.*uns;
Zf = meshgrid(Z0)'.*uns;
D = sqrt((Xf - Xd).^2 + (Yf - Yd).^2 + (Zf - Zd).^2);
// **********

in my case, it stops at step 2.

The limiting operation is ones(n, n), which requires a n*n matrix.
Using directly sparse() also requires a n^2 vector.

It might be possible to work with higher values of n by generating a sparse matrix without generating a n*n matrix (or a n^2 vector), as there are only n*(n+1)/2 non-zeroes values -- Is it possible?

(Anyway, in my case, it is still too big).

-- 
Christophe Dang Ngoc Chan
Mechanical calculation engineer

______________________________________________________________________

This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error), please notify the sender immediately and destroy this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden.
______________________________________________________________________



More information about the users mailing list