2012-10-02 12 views
5

के साथ लूप के लिए vectorize कैसे करें मैं Matlab के लिए नया हूँ, इसलिए मुझे यकीन नहीं है कि यह संभव है या नहीं। मैं एक साधारण राशि के लिए लूप:कस्टम इंडेक्स

for i=1:n 
    B.x(indexB(i)) += A.x(i); 
end 

कहाँ A.x और B.x n लंबाई के दो वैक्टर हैं, और indexB n लंबाई का एक वेक्टर कि B.x. को A.x में तत्वों से उचित मानचित्रण शामिल है

क्या इस लूप को सदिश बनाना संभव है?

उत्तर

8

मुझे ऐसा लगता है, इस उदाहरण की सहायता:

a = [1 2 3 4 5]; 
b = a; 
idx = [5 4 3 2 1]; 
a(idx) = a(idx) + b(1:5); 

कौन सा देना चाहिए:

a = 

6  6  6  6  6 
अपने मामले में

तो, अगर indexB आकार की है n आप लिख सकते हैं:

B.x(indexB) = B.x(indexB) + A.x(1:n); 

और अन्यथा:

B.x(indexB(1:n)) = B.x(indexB(1:n)) + A.x(1:n); 
+0

क्या यह अभी भी काम करेगा यदि ए और बी दोनों एक ही लंबाई नहीं थे? –

+0

हां, लेकिन सूचकांक के बीच बाएं और दाएं के बीच एक-से-एक मैपिंग होना चाहिए, या इस मामले में, सूचकांक वेक्टर 'इंडेक्सबी' बीएक्स के लिए उपयोग किया जाता है और इंडेक्स वेक्टर '[1: n]' एएक्स के लिए उपयोग किया जाता है। और जाहिर है, सूचकांक के तत्वों का उल्लेख है, अस्तित्व की जरूरत है। – Maurits

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