2011-04-19 14 views
12

मेरे पास MATLAB में 312 सरणी है, size(myArray) = [100 100 50] के साथ। अब, मैं एक 2 डी मैट्रिक्स के रूप में पहले आयाम में एक इंडेक्स द्वारा निर्दिष्ट एक विशिष्ट परत प्राप्त करना चाहता हूं। मैंने myMatrix = myArray(myIndex,:,:); की कोशिश की, लेकिन यह मुझे size(myMatrix) = [1 100 50] के साथ एक 3 डी सरणी देता है।मैं एक एन-डी सरणी के दो अंतिम आयामों को 2 डी सरणी के रूप में कैसे प्राप्त करूं?

मैं MATLAB कैसे कहूं कि मुझे पहले आयाम में रूचि नहीं है (क्योंकि केवल एक परत है), तो यह मैट्रिक्स को सरल बना सकता है?

नोट: मुझे वांछित [100 50] के बजाय size(myMatrix) = [100 1 50] प्रस्तुत करने के साथ ही दूसरी अनुक्रमणिका के साथ ऐसा करने की आवश्यकता होगी। एक समाधान दोनों मामलों पर लागू होना चाहिए, और अधिमानतः तीसरे आयाम के लिए भी लागू होना चाहिए।

उत्तर

14

squeeze समारोह है, जो सिंगलटन आयाम को हटा का प्रयोग करें।

उदाहरण:

A=randn(4,50,100); 
B=squeeze(A(1,:,:)); 
size(B) 

ans = 

    50 100 

यह सामान्यीकृत है और आप चिंता करने की आवश्यकता नहीं के बारे में जो आयाम आप के साथ का अनुक्रमण कर रहे हैं। सभी सिंगलटन आयाम निचोड़ा हुआ है।

2
reshape(myArray(myIndex,:,:),[100,50]) 
+0

शानदार! =) एसओ समुदाय सामान्य की तरह तेज़ है। –

0

squeeze, reshape और permute शायद एन-डी मैट्रिस से निपटने के दौरान तीन सबसे महत्वपूर्ण कार्य हैं। तीसरे फ़ंक्शन का उपयोग करने के लिए बस उदाहरण लें:

A=randn(4,50,100); 
B=permute(A(1,:,:),[2,3,1]) 
संबंधित मुद्दे