2011-08-22 16 views
10

मैं 2 मैट्रिक्स ए, बी को एक में कैसे जोड़ सकता हूं ताकि ए के नए मैट्रिक्स सी = पंक्ति 1, बी के पंक्ति 1 के बाद, फिर पंक्ति की पंक्ति 2, बी की पंक्ति 2, पंक्ति 3 ए, पंक्ति 3 बी, आदि के? अधिमानतः लूप के बिना?matlab - 2 matrices मर्ज/इंटरलस कैसे करें?

पूर्व: ए = [1 2 3; 4 5 6], बी = [5 5 5; 8 8 8]।
एबी = [1 2 3; 5 5 5; 4 5 6; 8 8 8]।

उत्तर

12

आपको केवल थोड़ी सी कटौती और पुनः बदलने की आवश्यकता है। सबसे पहले, आप आयाम 2 के साथ कैटनेट करते हैं, फिर आप ट्रांसफर करते हैं, और रैखिकरण (AB(:)), ताकि आप एक वेक्टर प्राप्त कर सकें जिसके पहले तीन तत्व ए की पहली पंक्ति हैं, फिर बी की पहली पंक्ति, फिर ए की दूसरी पंक्ति, आदि अंत में जो कुछ भी बचा है, वह सब कुछ फिर से सरणी में डालने के लिए रीशेप को कॉल कर रहा है।

nColumns = size(A,2); 
AB = [A,B]'; 
AB = reshape(AB(:),nColumns,[])'; 

वैकल्पिक रूप से, आप सीधे इंडेक्सिंग के माध्यम से एबी का निर्माण कर सकते हैं। इस मामले में, ए को बी की तुलना में एक और पंक्ति रखने की अनुमति है। यह उपर्युक्त की तुलना में शायद तेज है।

[nRowsA,nCols] = size(A); 
nRowsB = size(B,1); 

AB = zeros(nRowsA+nRowsB,nCols); 
AB(1:2:end,:) = A; 
AB(2:2:end,:) = B;