help-octave
[Top][All Lists]

## Re: Dot product (nx1).*(nxm)

 From: Joao Cardoso Subject: Re: Dot product (nx1).*(nxm) 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

--
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
-----------------------------------------------------------------------

```