2012-10-01 23 views
6

मैं मैट्रिक्स से प्रत्येक पंक्ति का एक अलग कॉलम प्राप्त करना चाहता हूं। उदाहरण के लिए:प्रत्येक पंक्ति में विभिन्न कॉलम प्राप्त करें

A = [1,2;1,4;5,2] 
B = [2;2;1] 

उत्पादन उपज चाहिए:

out = [2;4;5] 

तो संक्षेप में: A मैट्रिक्स है और B प्रति पंक्ति colums के लिए सूचकांक है। लूप का उपयोग किए बिना मैं इसे कैसे कर सकता हूं (यदि यह संभव है)?

उत्तर

7

आप sub2ind उपयोग कर सकते हैं मैट्रिक्स में रैखिक सूचकांक करने के लिए (i, j) सूचकांक कन्वर्ट करने के लिए एक

idx = sub2ind(size(A), 1:size(A, 1), B'); 
A(idx) 

ans = 

2  4  5 

कि यह सोचते हैं काम करता है कि वेक्टर बी के रूप में अनेक प्रविष्टियां हैं वहाँ के रूप में ए में पंक्तियों ऊपर sub2ind में हैं बाद की पंक्ति संख्याओं की प्रत्येक जोड़ी (1: आकार (ए, 1)) और बी

+0

यह पूरी तरह से काम करता है, धन्यवाद। मुझे यह समझने के लिए सब कुछ समझने के लिए सब 2ind के प्रलेखन को देखना होगा। – Tim

7

में दिए गए कॉलम नंबरों के लिए एक रैखिक सूचकांक उत्पन्न करता है, आप इसे diag(A(:,B)) द्वारा कर सकते हैं, हालांकि एक लूप है, लेकिन केवल निहित है। मुझे नहीं पता कि बिना किसी लूप के इसे कैसे किया जाए।

+1

सब 2ind का उपयोग करके उत्तर की तरह, यह पूरी तरह से चाल करता है। – Tim

+1

यह विधि निश्चित रूप से काम करती है, लेकिन जिस तरह से यह एक एन एक्स एन मैट्रिक्स (ए (:, बी) बनाता है)। यह काफी ओवरहेड है, जब आप वास्तव में अंत में चाहते हैं तो आकार का एक वेक्टर एन – angainor

+1

हाँ है, और यही कारण है कि मैंने आपका उत्तर वास्तविक उत्तर होने का चयन किया :-)। – Tim

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