I am a fortran user and i am currently switching to matlab. I read that to be efficient, it is better to vectorize than using for loops.
How would you vectorize this loop ?
for i=init:fina
a(i,i+nf)=b(i)*c(i);
end
I tried this but it does not work as "a" is a matrix and "b" and "c" are two vectors ; how to include a vector which is not a row or a column in a matrix ?
i=init:fina;
a(i,i+nf)=b(i).*c(i);
And I have also the inverse problem...how to extract a vector from a matrix a(i,i+nf) to be computed with another one like this :
b(i)=a(i,i+nf).*c(i);
Last but not least, the vectorization in these cases will be more efficient than the for loop ?
Kind regards.
FP

1 Kommentar

Jos (10584)
Jos (10584) am 2 Mär. 2017
Bearbeitet: Andrei Bobrov am 2 Mär. 2017
  • What are at the inputs (init, fina, nf, b, c)?
  • Does a exist already? or is it created on the spot?
  • Perhaps you can give a small example of the inputs and the expected output?

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 2 Mär. 2017
Bearbeitet: Andrei Bobrov am 2 Mär. 2017

0 Stimmen

first
a = zeros(fina,fina + nf);
ii = init:fina;
a(sub2ind([fina,fina + nf], ii,ii + nf)) = b(ii).*c(ii);
second
d = diag(a,nf-1);
b(ii) = d(ii)./c(ii);

1 Kommentar

frenchprion
frenchprion am 2 Mär. 2017
Great ! sub2ind and diag are the solutions !
Thanks !
FP

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by