2016-02-19 8 views
7

मान लीजिए कि मेरे पास m x n मैट्रिक्स ए है।
B, (n x m) x n मैट्रिक्स बनाने का कोई तरीका है जिसका "विकर्ण" A के कॉलम द्वारा बनाया गया है?कॉलम से ब्लॉक विकर्ण मैट्रिक्स

उदाहरण:

A = [1 2; 
    3 4] 

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

आपका उदाहरण मेल नहीं खाता है, आप 2 एम x n – Daniel

+1

के साथ समाप्त हो गए हैं, आप सही हैं! ठीक कर दिया! धन्यवाद –

उत्तर

4

यहाँ एक तरीका है:

  1. mat2cell का उपयोग कर, अपने कॉलम की एक cell array में कनवर्ट A;
  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=[1 2; 3 4]; 
[R C] = size(A); 

for i=1:C 
    B(1+R*(i-1) : R*i , i) = A(:,i); 
end 
संबंधित मुद्दे