Vectorization with a loop and repmat

19 vues (au cours des 30 derniers jours)
yoshiyuki
yoshiyuki le 14 Août 2014
Réponse apportée : Matt J le 14 Août 2014
i would like to vectoralize the following codes with loop;
n=5;
k=3;
x=(k:n)';
m=[];
for i = 1 : (n-k+1)
m=[m,x];
x=circshift(x,-1);
end
example;
k=3, n=5
3 4 5,
4 5 3,
5 3 4
please help me out

Réponse acceptée

Michael Haderlein
Michael Haderlein le 14 Août 2014
That sounds like a nice cody task ;-) I'm sure there are dozens of solution, so my suggestion is:
m=k+mod(bsxfun(@(x,y) y+x,(0:n-k)',0:n-k),n-k+1);
  1 commentaire
yoshiyuki
yoshiyuki le 14 Août 2014
Michael Thanks a lot for your elegant answer!

Connectez-vous pour commenter.

Plus de réponses (2)

Azzi Abdelmalek
Azzi Abdelmalek le 14 Août 2014
Modifié(e) : Azzi Abdelmalek le 14 Août 2014
n=5;
k=3;
x=(k:n)'
idx=rem(bsxfun(@plus,(0:n-k)',(0:n-k)),n-k+1)+1
out=x(idx)

Matt J
Matt J le 14 Août 2014
y=k:n-1;
m = fliplr(toeplitz([n,y],[n,fliplr(y)]))

Catégories

En savoir plus sur Just for fun dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by