matlab - vectorized block assign with overlopping values -
इसलिए मैं आज इस बग में गया
A_TEST (dest,:) = A_TEST ( स्रोत,:) + A_TEST (गंतव्य, :); A_TEST (:, गंतव्य) = A_TEST (:, स्रोत) + A_TEST (:, गंतव्य); अगर असल अनन्य है, यह विफल हो जाता है (जो समझ में आता है)। इसलिए मेरा त्वरित तय है कि dest (कश्मीर = 1: numel (dest)) के लिए dest
पर लूप करने के लिए है (ए), () (ए) () () ,:) = (स्रोत (कश्मीर) :) + A (गंतव्य (के), :); ए (:, गंतव्य (के)) = एक (:, स्रोत (के)) + A (:, गंतव्य (के)); अंत और लूप के लिए ऐसी मैटलब खराब है कैसे एक इस कॉल vectorize होगा
निम्नलिखित के साथ, मैं यह दिखाता हूँ कि पंक्तियों के साथ इसे कैसे करें। इसे कॉलम के साथ करने के लिए, यह एक समान दृष्टिकोण है लेकिन अलग कोड है, मैं क्यों समझाता हूं।
संक्षेप में, आपके पास एक मैट्रिक्स ए है, जिसमें n पंक्तियां और पी स्तंभ हैं I आपके पास [1, n] , src , और dst के लिए आईडी में श्रेणी के पूर्णांक की एक सूची है। मैं मान रहा हूँ कि दोनों एक ही आकार के होते हैं, और इसमें n तत्वों से अधिक होते हैं (ताकि दोनों संभावित रूप से दोहराव हो)। src s < कोड> डीएसटी एस, यह स्पष्ट है कि आप जिस ऑपरेशन के बारे में बात कर रहे हैं वह पंक्तियों के रैखिक पुनर्संयोजन के बराबर है। यह nxn मैट्रिक्स द्वारा पूर्व-गुणा के बराबर है, जिसमें तत्व (i, j) = k का अर्थ है "गंतव्य पंक्ति के अनुरूप पुनर्संयोजन जिसमें मैं पंक्ति j शामिल है बहुलता कश्मीर "। यह निम्न कोड करता है:
फ़ंक्शन ए = पागल विज्ञान (ए, सोर, डीएसटी) n = आकार (ए, 1); एम = आंख (एन); Ix = सब 2 इंड ([एन, एन], डीएसटी, एसआरसी); [ux, ~, mlt] = अद्वितीय (ix); नक्स = लम्बाई (ux); एमएलटी = जमा (एमएलटी (:), 1, [निक्स, 1]); एम (ux) = एम (ux) + mlt '; ए = एम * ए; अंत नोट 1: आपके द्वारा दी गई दो कोड नहीं समकक्ष हैं; आपको उन्हें अलग करने के लिए दो अलग के लिए छोरों की आवश्यकता होगी। नोट 2: कॉलम पर एक ही ऑपरेशन मैट्रिक्स द्वारा पोस्ट गुणा के बराबर है (i, j) = k का अर्थ है "स्तंभ जम्मू के लिए पुनर्संयोजन में कई गुणक के साथ कॉलम I होता है"। नोट 3: अगर ए वर्ग है, तो दोनों ऑपरेशन उसी मैट्रिक्स एम के साथ किया जा सकता है क्योंकि (M * A) * M ' (कोष्ठक महत्वपूर्ण हैं)।
Comments
Post a Comment