2016-02-19 107 views
7

假設我有一個m x n矩陣A.
有沒有辦法創建B(n x m) x n矩陣,其「對角線」由A的列組成?來自列的塊對角矩陣

實施例:

A = [1 2; 
    3 4] 

B = [1 0; 
    3 0; 
    0 2; 
    0 4] 
+2

您的示例不匹配,最終以2m x n – Daniel

+1

說得對!修復!謝謝 –

回答

4

下面是一個方法:

  1. 轉換A到其列的cell array,使用mat2cell;
  2. 從該單元陣列中生成一個comma-separated list,並將其用作blkdiag的輸入。

代碼:

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 

這將產生

B = 
    1  0 
    3  0 
    0  2 
    0  4 
2

這裏是一個簡短的腳本來做到這一點。它適用於任何尺寸的A。

A=[1 2; 3 4]; 
[R C] = size(A); 

for i=1:C 
    B(1+R*(i-1) : R*i , i) = A(:,i); 
end