Block diagonal matrix of columns

Suppose I have a matrix mxn A.
Is there a way to create a matrix B , a (nxm) xn whose “diagonal” is formed by columns A ?

Example:

 A = [1 2; 3 4] B = [1 0; 3 0; 0 2; 0 4] 
+7
arrays matrix matlab
source share
2 answers

Here is a way:

the code:

 A = [1 2; 3 4]; %// example data C = mat2cell(A, size(A,1), ones(1,size(A,2))); %// step 1 B = blkdiag(C{:}); %// step 2 

It creates

 B = 1 0 3 0 0 2 0 4 
+4
source share

Here is a short script to execute this. It works for any A. measurements.

 A=[1 2; 3 4]; [RC] = size(A); for i=1:C B( 1+R*(i-1) : R*i , i ) = A(:,i); end 
+2
source share

All Articles