Adding columns to matrix using circshift by auto incrementing

I want to develop a square matrix from a column matrix using circshift. Here is an example code:
z=[0;1;2;3];
x=[z,circshift(z,1),circshift(z,2),circshift(z,3)];
Output: >> x
x =
0 3 2 1
1 0 3 2
2 1 0 3
3 2 1 0
I have to do similar for the order of 1200 instead of 4 so I want it to be automatic. Can some one please suggest how can I use loop of vector in this case?
Thanks

 Réponse acceptée

Mischa Kim
Mischa Kim le 4 Fév 2014
Modifié(e) : Mischa Kim le 4 Fév 2014
You coud use a simple loop:
z = [0;1;2;3];
z_mat = zeros(length(z));
z_mat(:,1) = z;
for ii = 2:length(z)
z_mat(:,ii)= circshift(z,ii);
end
Initializing a matrix ( zeros ) is faster than appending vectors to a matrix.

Plus de réponses (2)

z=[0;1;2;3];
x = [z;z];
n = numel(z);
out = x(bsxfun(@minus,(n+1:2*n)',0:n-1));
saad
saad le 4 Fév 2014
Thanks for your answers, I already solved using these commands: for n=1:1199 Xm(:,n+1) = circshift(b,n); end

Catégories

En savoir plus sur Sparse Matrices 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