Adding columns to matrix using circshift by auto incrementing

2 views (last 30 days)
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

Accepted Answer

Mischa Kim
Mischa Kim on 4 Feb 2014
Edited: Mischa Kim on 4 Feb 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.

More Answers (2)

Andrei Bobrov
Andrei Bobrov on 4 Feb 2014
z=[0;1;2;3];
x = [z;z];
n = numel(z);
out = x(bsxfun(@minus,(n+1:2*n)',0:n-1));

saad
saad on 4 Feb 2014
Thanks for your answers, I already solved using these commands: for n=1:1199 Xm(:,n+1) = circshift(b,n); end

Community Treasure Hunt

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

Start Hunting!