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 commentaire

Jos (10584)
Jos (10584) le 2 Mar 2017
Modifié(e) : Andrei Bobrov le 2 Mar 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?

Connectez-vous pour commenter.

 Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 2 Mar 2017
Modifié(e) : Andrei Bobrov le 2 Mar 2017

0 votes

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 commentaire

frenchprion
frenchprion le 2 Mar 2017
Great ! sub2ind and diag are the solutions !
Thanks !
FP

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by