<div dir="auto">For me it's fun to see thevarious attempts at improving speed. Thanks to Stephane for the x*x tip being better than x^2. <div dir="auto"><br></div><div dir="auto">Best regards</div><div dir="auto">Claus </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Feb 1, 2018 17:11, "Stéphane Mottelet" <<a href="mailto:stephane.mottelet@utc.fr">stephane.mottelet@utc.fr</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
I hope that the following will stop the (useless) competition : if speed is a real bottleneck for this particular computation, using plain C is the only option. The self-contained script (n=20000) given at the end of this message gives the following timings on various hardware (only one processor core is used) :<br>
<br>
2,8 GHz Quad-Core Intel Xeon : 1.08 s (OSX)<br>
2.2 GHz Xeon(R) CPU E5-2660 v2 @  : 1.84 s (Linux)<br>
<br>
Don't use plain Scilab if speed is a crucial issue....<br>
<br>
//  start of code<br>
source=['#include <math.h>'<br>
'#define SQR(x) ((x)*(x))'<br>
'#define MIN(x, y) (((x) < (y)) ? (x) : (y))'<br>
'void mindist(double d[],double x[],int *n) {'<br>
'  int i,j,k;'<br>
'  double dist;'<br>
'  for (i=0;i<*n;i++) { '<br>
'    d[i]=INFINITY;'<br>
'    for (j=0;j<*n;j++) if (i!=j) { '<br>
'      dist=0;'<br>
'      for (k=0;k<3;k++) dist+=SQR(x[j*3+k]-x[i*3+k]);'<br>
'      d[i]=MIN(d[i],dist);'<br>
'    }'<br>
'  }'<br>
'}']<br>
mputl(source,'mindist.c')<br>
ilib_for_link('mindist','mindi<wbr>st.c',[],"c");<br>
exec loader.sce<br>
<br>
n=20000;<br>
r=23;<br>
radius = r*grand(n,1,'def').^(1/3);<br>
phi = 2*%pi*grand(n,1,'def');<br>
costheta = 1 - 2*grand(n,1,'def');<br>
radsintheta = radius.*sin(acos(costheta));<br>
<br>
X=[radsintheta.*cos(phi) radsintheta.*sin(phi) radius.*costheta];<br>
<br>
n=size(X,1);<br>
tic;<br>
dist=sqrt(call("mindist",X',2,<wbr>"d",n,3,"i","out",[1,n],1,"d")<wbr>);<br>
disp(toc())<br>
// end of code<br>
<br>
Le 31/01/2018 à 23:31, Rafael Guerra a écrit :<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Heinz,<br>
<br>
Find herein a vectorised memory hog solution for Scilab 6, which is fast (~30 s for 20K points on Win7 laptop):<br>
<br>
// START OF CODE (Scilab 6)<br>
Clear<br>
n=20000;<br>
r=23;<br>
radius = r*grand(n,1,'def').^(1/3);<br>
phi = 2*%pi*grand(n,1, 'def');<br>
costheta = 1 - 2*grand(n,1, 'def');<br>
radsintheta = radius.*sin(acos(costheta));<br>
X = [radsintheta.*cos(phi), radsintheta.*sin(phi), radius.*costheta];<br>
tic;<br>
X2 = sum(X.*X, 'c');<br>
X3 = X2.*.ones(n,1)';<br>
X3 = X3 + X3';<br>
D = abs(X3 - 2*(X*X'))';<br>
D(1:n+1:$) = [];  // remove diagonal 0's<br>
D = matrix(D,n-1,n); // reshape D to (n-1) x n size<br>
MinDist1 = sqrt(min(D,'r'));<br>
t1=toc();<br>
disp(t1)<br>
jj=-0.05:0.1:3.05;<br>
H1 = histc(jj,MinDist1);<br>
disp([0.05+jj(1:$-1)' H1']);<br>
// END OF CODE<br>
<br>
Regards,<br>
Rafael<br>
<br>
______________________________<wbr>_________________<br>
users mailing list<br>
<a href="mailto:users@lists.scilab.org" target="_blank">users@lists.scilab.org</a><br>
<a href="http://lists.scilab.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.scilab.org/mailma<wbr>n/listinfo/users</a><br>
</blockquote>
<br>
<br>
-- <br>
Stéphane Mottelet<br>
Ingénieur de recherche<br>
EA 4297 Transformations Intégrées de la Matière Renouvelable<br>
Département Génie des Procédés Industriels<br>
Sorbonne Universités - Université de Technologie de Compiègne<br>
CS 60319, 60203 Compiègne cedex<br>
Tel : <a href="tel:%2B33%280%29344234688" value="+33344234688" target="_blank">+33(0)344234688</a><br>
<a href="http://www.utc.fr/~mottelet" rel="noreferrer" target="_blank">http://www.utc.fr/~mottelet</a><br>
<br>
______________________________<wbr>_________________<br>
users mailing list<br>
<a href="mailto:users@lists.scilab.org" target="_blank">users@lists.scilab.org</a><br>
<a href="http://lists.scilab.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.scilab.org/mailma<wbr>n/listinfo/users</a><br>
</blockquote></div></div>