2016-02-19 19 views
7

Supponiamo di avere una matrice A m x n.
C'è un modo per creare B, una matrice (n x m) x n la cui "diagonale" è formata dalle colonne di A?Matrice diagonale a blocchi da colonne

Esempio:

A = [1 2; 
    3 4] 

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

Il tuo esempio non corrisponde, ti ritrovi con 2m x n – Daniel

+1

Hai ragione! Aggiustato! Grazie –

risposta

4

Ecco un modo:

  1. Converti A ad un cell array delle sue colonne, utilizzando mat2cell;
  2. Da quell'array di celle genera un comma-separated list e lo utilizza come input per blkdiag.

Codice:

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 

Questo produce

B = 
    1  0 
    3  0 
    0  2 
    0  4 
2

Ecco un breve script per ottenere questo risultato. Funziona per qualsiasi dimensione di 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 
Problemi correlati