[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