2009-04-27 16 views
8

मान लीजिए कि मेरे पास 1-by-12 मैट्रिक्स था और मैं इसे 4-by-3 मैट्रिक्स में आकार बदलना चाहता था। मैं ये कैसे करूं?MATLAB में मैट्रिक्स का आकार कैसे बदलूं?

मेरे वर्तमान समाधान बदसूरत की तरह है:

for n = 1:(length(mat)/3) 
    out(n,1:3) = mat(((n-1)*3 + 1):((n-1)*3 + 3)); 
end 

वहाँ यह करने के लिए एक बेहतर तरीका है?

उत्तर

24

reshape निश्चित रूप से उचित समाधान है, जैसा कि @gnovice द्वारा बताया गया है।

A = 1:12; 
B = reshape(A,4,[]); 
B = 
    1  5  9 
    2  6 10 
    3  7 11 
    4  8 12 

तो अगर आप कितने कॉलम नहीं होगा पता नहीं है, reshape यह आप के लिए गणना होगी:

reshape का एक अच्छा विशेषता यह है कि यह अनुमति देता है। इसी प्रकार, reshape पंक्तियों की संख्या भर देगा, अगर आप इसे छोड़ दें।

C = reshape(A,[],4) 
C = 
    1  4  7 10 
    2  5  8 11 
    3  6  9 12 
+2

+1: अच्छा! मैंने वास्तव में पहले कभी नहीं देखा। मुझे लगता है मुझे इसका इस्तेमाल कभी नहीं करना पड़ा। – gnovice

12

RESHAPE समारोह का प्रयास करें:

A = (1-by-12 matrix); 
B = reshape(A,4,3); 

मैट्रिक्स बी एक columnwise फैशन में एक से तत्वों से भर दिया जाएगा ध्यान दें कि (यानी कॉलम ऊपर से नीचे तक भरा जाएगा, के लिए छोड़ दिया ले सही)।

उदाहरण:

>> A = 1:12; 
>> B = reshape(A,4,3) 

B = 

    1  5  9 
    2  6 10 
    3  7 11 
    4  8 12 
+0

ध्यान दें कि यदि ए में बिल्कुल 4 * 3 तत्व नहीं हैं तो reshape त्रुटि देता है। – AnnaR

+0

हां, यह RESHAPE का सामान्य अपेक्षित व्यवहार है। – gnovice

+1

यदि हम बिल्कुल 4 * 3 तत्व नहीं हैं तो शून्य को जोड़ने के लिए हम RESHAPE को नहीं बता सकते हैं? मेरा मतलब था कि 12 से कम तत्व हैं। –

9

gnovice के समाधान का विस्तार करने के:

के बाद आप कहा जाता है आप मैट्रिक्स निर्माण, उपयोग पक्षांतरित ('ऑपरेटर) या permute() का एक अलग आदेश आयाम क्रम बदलने के लिए की जरूरत है reshape()

+0

+1: ट्रांसपोजिंग और PERMUTE के बारे में अच्छा बिंदु। इन्हें कभी-कभी रीशेप के बाद जरूरी होता है। – gnovice

संबंधित मुद्दे