2010-03-18 9 views
12

में मैट्रिस को दोबारा कैसे बदलें मैट्रिस में हेरफेर करते समय अक्सर उनके आकार को बदलने के लिए सुविधाजनक होता है। उदाहरण के लिए, लंबाई NX एम का एक वेक्टर MATLAB में में एक एन एक्स एम आकार मैट्रिक्स चालू करने के लिए एक आकृति बदलें समारोह मौजूद है:मैथमैटिका

नयी आकृति प्रदान (एक्स, एम, एन) एम-दर-एन मैट्रिक्स रिटर्न जिनके तत्व एक्स से कॉलम वार लेते हैं। एक त्रुटि परिणाम यदि एक्स में एम * एन तत्व नहीं हैं।

एक मैट्रिक्स और वेक्टर मैं मेथेमेटिका समारोह समतल जो मैट्रिक्स के लिए मेथेमेटिका के नेस्टेड सूची प्रतिनिधित्व का लाभ लेता है का उपयोग कर सकते के बीच परिवर्तित करने के मामले में। एक त्वरित उदाहरण के रूप में, मैं एक मैट्रिक्स एक्स मान लीजिए:

4x4 matrix

साथ समतल [X] मैं वेक्टर प्राप्त कर सकते हैं {1,2,3, ..., 16}। जब तक

4x4 matrix

यह मनमाने ढंग से मैट्रिक्स के निर्माण की अनुमति होगी: लेकिन क्या कहीं अधिक उपयोगी होगा मैटलैब का आकृति बदलें लागू करने के लिए कुछ सदृश (एक्स, 2,8) जो निम्नलिखित मैट्रिक्स में परिणाम होगा है एन * एम के बराबर आयाम। जहां तक ​​मैं कह सकता हूं, वहां कुछ भी नहीं बनाया गया है जिसमें मुझे आश्चर्य होता है कि किसी ने अपने स्वयं के रिशेप फ़ंक्शन को कोड नहीं किया है।

उत्तर

3

मैं जानता हूँ कि यह एक पुरानी धागा है, लेकिन मैं एक अधिक सामान्य तरीका है कि लंबाई मीटर * n * ... सूची की अनुमति देता है एक मीटर में तब्दील किया जा करने के लिए मिल गया है खोजें गूगल अभिलेखागार के लिए और * n * ... सरणी:

Reshape[list_, shape__] := Module[{i = 1}, 
    NestWhile[Partition[#, shape[[i]]] &, list, ++i <= Length[shape] &] 
    ] 

उदाहरण के लिए:

In:= Reshape[Range[8], {2, 2, 2}] 

Out:= {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}} 
+0

नोट: यह समाधान पिछले दो आयाम transposes, इसलिए यह नहीं है काफी काम करते हैं। – Guillochon

4
Reshape[list_, dimensions_] := 
First[Fold[Partition[#1, #2] &, Flatten[list], Reverse[dimensions]]] 

उदाहरण उपयोग:

+०१२३५१६४१०६१
In: Reshape[{1,2,3,4,5,6},{2,3}] 

Out: {{1,2,3},{4,5,6}} 

यह मनमानी गहराई के सरणी के साथ काम करता है।

10

ArrayReshape बिल्कुल यही करता है।

+0

नोट यह प्रश्न तब उपलब्ध नहीं था जब सवाल पूछा गया था, लेकिन संभवतः आज का सबसे अच्छा जवाब है .. (संस्करण 9 में नया) – agentp

+0

@george yes; अनुकूली उत्तरों को बढ़ावा देने के लिए साइट की भावना में है! –

0

अब भी एक नया कार्य ArrayReshape [] है।

उदाहरण:

{{1, 2, 3}, {4, 5, 6}} // MatrixForm 

ArrayReshape[{{1, 2, 3}, {4, 5, 6}}, {3, 2}] // MatrixForm 
+0

मैं स्तंभ द्वारा दोबारा कैसे बदलूं? यानी, तत्व लंबवत नीचे जाते हैं और फिर अगले कॉलम में जाते हैं? –

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