help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: adding vectors and matrices


From: Ted Harding
Subject: Re: adding vectors and matrices
Date: Fri, 22 Aug 1997 20:01:22 +0100 (GMT+0100)

( Re Message From: O. Scott Sands )
> 
> Ted Harding wrote:
> > 
> > ( Re Message From: Andreas Heitmann )
> > >
> > > I'm using octave for some time now, but I'm still wondering if there
> > > is a simple way to add a fixed column vector to a number of other
> > > column vectors stored in a matrix. Currently i'm using a loop like the
> > > following:
> > >
> > >       v=[1;2;3];
> > >       for i=1:columns(x)
> > >               y(:,i)=x(:,i)+v;
> > >       endfor
> > >
> > > Is it possible to compute y without a loop statement?
> > 
> > Hi,
> > 
> >       y = x + v*ones(1,columns(x));
> > 
> > will do it. I understand John Eaton plans to incorporate a syntax like
> > 
> >       y = x .+ v
> > 
> > for a future release which will do the same thing (and the corresponding
> > thing if v is a row vector with as many elements as x has columns, i.e.
> > add v to each row of x).
> > 
> > Best wishes,
> > Ted.                                    (address@hidden)
> 
> nononononononono!
> 
> Octave supports zero-one indexing (ala MATLAB) so you
> can use "Tony's Trick" (see Mathworks archives)
> 
> y=x+v(:,ones(1,columns(x)));
> 
> The indexing functions done in with Tony's Trick
> are much faster than the multiply operations 
> suggested by y=x+v*ones(1,columns(x)). Try it!

Just did, and I'm not sure you're right:

    X = rand(20,200); v = rand(20,1);

    tic;
      for i=1:10000,
        Y=0; Y=X+v*ones(1,200);
      endfor
    toc ## -----> 23 seconds
    tic;
      for i=1:10000,
        Y=0; Y=X+v(:,ones(1,200));
      endfor
    toc ## -----> 34 seconds

And the same with the two methods in reverse order.

> Since this issue appears periodically in the 
> mailing list here, maybe it should be put in 
> the manual?

Let's make sure we're right about it first ... but I agree it's
definitely a FAQ!

Ted.                                    (address@hidden)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]