From help-octave-request at bevo dot che dot wisc dot edu Sun Dec 5 14:19:53 1999 Subject: Re: Dot product (nx1).*(nxm) From: Joao Cardoso To: Mike Miller CC: Heber Farnsworth , "'Andre Bonfrer'" , "'help-octave@bevo.che.wisc.edu'" Date: Sun, 05 Dec 1999 20:19:39 +0000 Mike Miller wrote: > On Sat, 4 Dec 1999, Heber Farnsworth wrote: > > > p(:,ones(1,m)).*v > > > > where p is nx1 and v is nxm. What this does is to multiply v by a nxm > > natrix which has p as every column. > > Apparently, Heber's method is faster in this example than the one I > suggested: > > octave:1> p=rand(100,1); > octave:2> q=ones(1,50); > octave:3> p2=p*q; > octave:4> t0=cputime; for i=1:1000, p2=p*q; end , cputime-t0 > ans = 2.4600 > octave:5> t0=cputime; for i=1:1000, p2=p(:,q); end , cputime-t0 > ans = 2.0100 > As I never really understood the line 5 syntax, I always use the line 4 method -- I understand it. But my timings shows the reverse conclusion: octave:59> p=rand(100,1); octave:60> q=ones(1,50); octave:61> p2=p*q; octave:62> t0=cputime; for i=1:1000, p2=p*q; end , cputime-t0 ans = 0.27000 octave:63> t0=cputime; for i=1:1000, p2=p(:,q); end , cputime-t0 ans = 0.37000 for greater (5X) matrices, however: octave:72> p=rand(500,1); octave:73> q=ones(1,250); octave:74> p2=p*q; octave:75> t0=cputime; for i=1:1000, p2=p*q; end , cputime-t0 ans = 8.2200 octave:76> t0=cputime; for i=1:1000, p2=p(:,q); end , cputime-t0 ans = 7.5300 octave:77> 8.2200/0.27000 ans = 30.444 octave:78> 7.5300/0.37000 ans = 20.351 with still greater (10X) matrices (what? isn't a gray sunday?) octave:80> p=rand(1000,1); octave:81> q=ones(1,500); octave:82> p2=p*q; octave:83> t0=cputime; for i=1:1000, p2=p*q; end , cputime-t0 ans = 35.580 octave:84> t0=cputime; for i=1:1000, p2=p(:,q); end , cputime-t0 ans = 30.150 octave:85> 35.580/0.27000 ans = 131.78 octave:86> 30.150/0.37000 ans = 81.486 The first method scales as 1.4*N^2, obviously, and the last one seems to scale as 3.7*N*log(N), so I must learn the second method syntax! Contributions? I'm using Octave-2.1.14 on a 500MHz PIII. Joao -- Joao Cardoso | e-mail: jcardoso at inescn dot pt INESC, R. Jose Falcao 110 | tel: + 351 2 2094322 4050 Porto, Portugal | fax: + 351 2 2008487 ----------------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.che.wisc.edu/octave/octave.html How to fund new projects: http://www.che.wisc.edu/octave/funding.html Subscription information: http://www.che.wisc.edu/octave/archive.html -----------------------------------------------------------------------