Can anyone show me how I can avoid following for loops

*Hello everyone,
Can anyone show me how I can avoid following for loops.
Thanks!*
mth=0;
nth=0;
for i=1:1000
ML = [1,2;3,4];
for ix=1:size(ML,1)
for iy=1:size(ML,2)
M(mth+ix,nth+iy)=ML(ix,iy);
end
end
mth = mth+size(ML,1);
nth = nth+size(ML,2);
end

 Respuesta aceptada

Matt Fig
Matt Fig el 8 de Oct. de 2012
Editada: Matt Fig el 8 de Oct. de 2012
Here is a one approach:
M = diag(repmat([1 4],1,1000)) +...
diag([repmat([2 0],1,999) 2],1) +...
diag([repmat([3 0],1,999) 3],-1);
And another:
M = diag(repmat([1 4],1,1000));
M(2001:2001:end) = [repmat([2 0],1,999) 2];
M(2:2001:end) = [repmat([3 0],1,999) 3];

Más respuestas (1)

for iy=1:size(ML,2)
M(mth+ix,nth+iy)=ML(ix,iy);
end
can be written as
MLc = size(ML,2);
M(mth+ix, nth:nth+MLc-1) = ML(ix, 1:MLc);

3 comentarios

Daniel Shub
Daniel Shub el 8 de Oct. de 2012
Editada: Daniel Shub el 8 de Oct. de 2012
Are you sure? If nth is 0 and MLc is 2, nth:nth+MLc-1 gives [0, 1] which causes indexing problems. I think it is nth+(1:MLc) on the RHS.
Walter Roberson
Walter Roberson el 8 de Oct. de 2012
Editada: Walter Roberson el 8 de Oct. de 2012
Yes, that would make sense on the LHS.
Yes, LHS not RHS...

Iniciar sesión para comentar.

Categorías

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by