2012-07-10 15 views
8

के साथ submatrix निकालें मैं MATLAB में इस बहुत ही सरल समस्या के लिए एक सुरुचिपूर्ण समाधान की तलाश में हूं। मान लीजिए मैं एक मैट्रिक्सMATLAB: लॉजिकल इंडेक्सिंग

>> M = magic(5) 

M = 

    17 24  1  8 15 
    23  5  7 14 16 
    4  6 13 20 22 
    10 12 19 21  3 
    11 18 25  2  9 

और फार्म

I = 

    0  0  0  0  0 
    0  1  1  0  0 
    0  1  1  0  0 
    0  0  0  0  0 
    0  0  0  0  0 

के एक तार्किक चर है, तो मैं I में 1 मूल्यों से जुड़े M के तत्वों प्राप्त करने का प्रयास, मैं एक स्तंभ वेक्टर मिल

>> M(I) 

ans = 

    5 
    6 
    7 
    13 

इस लॉजिकल इंडेक्सिंग से मैट्रिक्स [5 7 ; 6 13] प्राप्त करने का सबसे आसान तरीका क्या होगा?

यदि मुझे I के गैर-शून्य तत्वों का आकार पता है, तो मैं अनुक्रमण के बाद एक reshape का उपयोग कर सकता हूं, लेकिन यह एक सामान्य मामला नहीं है।

इसके अलावा, मुझे पता है कि MATLAB में इस प्रकार के अनुक्रमण के लिए डिफ़ॉल्ट व्यवहार उस मामले के संबंध में स्थिरता को लागू करता है जिसमें I में गैर-शून्य मान मैट्रिक्स नहीं बनाते हैं, लेकिन मुझे आश्चर्य है कि कोई सरल है या नहीं इस विशेष मामले के लिए समाधान।

उत्तर

11

यह ऐसा करने का एक तरीका है। यह माना जाता है कि I की सभी पंक्तियों में से एक ही संख्या है। यह भी माना जाता है कि I के सभी कॉलम में समान संख्या है, क्योंकि Submatrix आयताकार होना चाहिए।

%# Define the example data. 

M = magic(5); 
I = zeros(5); 
I(2:3, 2:3) = 1; 

%# Create the Submatrix. 

Submatrix = reshape(M(find(I)), max(sum(I)), max(sum(I'))); 
2
M = magic(5); 
I = [ ... ]; 

ind = find(I); %# find indices of ones in I 
[y1, x1] = ind2sub(size(M), ind(1)); %# get top-left position 
[y2, x2] = ind2sub(size(M), ind(end)); %# get bottom-right position 
O = M(y1:y2, x1:x2); %# copy submatrix 
3

यहाँ एक बहुत ही सरल उपाय है:

T = I(any(I'),any(I)); 
T(:) = M(I); 
+0

बस क्या मैं :-) –

+0

जवाब देने के लिए है कि allways, उदा काम नहीं करता जा रहा था जब सममित नहीं है। – rst

+0

@RobertStettler यदि आपका मतलब है कि मैट्रिक्स 'I' को यादृच्छिक रूप से नहीं बनाया जा सकता है, तो यह सच है, लेकिन मुझे लगता है कि यह एक उचित सीमा है। यदि आपका मतलब कुछ और है: मैं नहीं देखता कि समरूपता कैसे प्रासंगिक है, क्या आप शायद एक उदाहरण पेश कर सकते हैं जहां समाधान विफल हो जाता है? (इनपुट मैट्रिक्स, आउटपुट, अपेक्षित आउटपुट)। –

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