help-octave
[Top][All Lists]
Advanced

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

Re: Vectorizing for loops .. can't get the hang of it


From: Juan Pablo Carbajal
Subject: Re: Vectorizing for loops .. can't get the hang of it
Date: Tue, 6 Nov 2012 17:57:25 +0100

On Tue, Nov 6, 2012 at 5:31 PM, Joza <address@hidden> wrote:
> I understand I should REALLY try use vectors instead of for loops ... anyone
> care to explain how to do it? I come from a CS programming background so
> traditional for loops always seem the easiest to me.
>
> A piece of code I've used recently is below. I couldn't figure out how to
> vectorize it. Where do i start?
>
> for i=1:n
>                 sum = 0.0;
>
>                 if i==1
>                         for j=1:2
>                                 sum = sum + A(i,j)*x(j);
>                         end
>                 elseif i==n
>                         for j=n-1:n
>                                 sum = sum + A(i,j)*x(j);
>                         end
>                 else
>                         for j=i-1:i+1
>                                 sum = sum + A(i,j)*x(j);
>                         end
>                 end
>
>
>
> --
> View this message in context: 
> http://octave.1599824.n4.nabble.com/Vectorizing-for-loops-can-t-get-the-hang-of-it-tp4646169.html
> Sent from the Octave - General mailing list archive at Nabble.com.
> _______________________________________________
> Help-octave mailing list
> address@hidden
> https://mailman.cae.wisc.edu/listinfo/help-octave

The loops and the conditions could be written (assuming x is a column vector)

# do not use sum you are overwirting a function
ss = A(1,1:2)*x(1:2);

ss += A(n,n-1:n)*x(n-1:n);

ss += sum ( A(2:n-1,1:n)*x(1:n) );

Now you see a pattern. The first line of A, whatever is A is using
only the first two cols. Similarly, the last line of A uses only the
last two cols, so you could do it in one shot

A(1,3:end) = 0;
A(n,1:n-2) = 0;
ss = sum (A*x)


I did not check this gives the same result as your code, but it should
give you an idea... or not :D


reply via email to

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