आप पाश के लिए एक का उपयोग करने से बच चाहते हैं, यह शायद यह करने के लिए स्पष्ट तरीका है:
indexCell = num2cell(indexmatrix,1);
linearIndexMatrix = sub2ind(size(kDimensionalMatrix),indexCell{:});
finalTable = kDimensionalMatrix(linearIndexMatrix);
व्याख्या:
पहली पंक्ति indexmatrix के प्रत्येक स्तंभ डालता है का उपयोग कर सेल सरणी की अलग-अलग कोशिकाओं में। यह हमें एक समारोह है कि (प्रत्येक मैट्रिक्स तत्व 1 से एन, एन होने के गिने है रैखिक सूचकांक में subscripted सूचकांक (पंक्ति, कॉलम, आदि) में कनवर्ट करता SUB2IND में एक comma-separated list के रूप में सभी कश्मीर कॉलम पारित करने के लिए अनुमति देता है मैट्रिक्स में तत्वों की कुल संख्या)। अंतिम पंक्ति आपके लूप को प्रतिस्थापित करने के लिए इन रैखिक सूचकांक का उपयोग करती है। मैट्रिक्स इंडेक्सिंग (सबस्क्रिप्ट, रैखिक, और तार्किक) के बारे में एक अच्छी चर्चा here मिल सकती है। सोचा के लिए
कुछ अधिक भोजन ...
प्रवृत्ति vectorized समाधान के पक्ष में छोरों के लिए से संकोच के लिए कुछ कई MATLAB उपयोगकर्ताओं (अपने आप को शामिल) के आदी हो गए हैं है। हालांकि, MATLAB हैंडल के नए संस्करण अधिक कुशलता से लूपिंग हैंडल करते हैं। जैसा कि this answer में किसी अन्य SO प्रश्न पर चर्चा की गई है, लूप के लिए उपयोग करने से कभी-कभी वेक्टर किए गए समाधान के साथ तेज़ी से चलने वाले कोड में परिणाम हो सकता है।
मैं निश्चित रूप से यह नहीं कह रहा हूं कि आपको अब अपने कोड को सदिश बनाने की कोशिश नहीं करनी चाहिए, केवल यह कि हर समस्या अद्वितीय है। वेक्टरिंग अक्सर अधिक कुशल हो, लेकिन हमेशा नहीं है। आपकी समस्या के लिए, वेक्टरकृत कोड बनाम लूप के लिए निष्पादन गति शायद इस बात पर निर्भर करेगी कि n और k मान कितने बड़े हैं।
बढ़िया! क्या आप इसे पंक्तियों की संख्या से भी स्वतंत्र कर सकते हैं? – AnnaR
@AnnaR - मैंने अभी एक उत्तर पोस्ट किया है जो एक बार में 'indexmatrix' की सभी 'n' पंक्तियों को संभालता है। – Shai