2013-07-12 5 views
5

बिना आपरेशन वहाँ निम्नलिखित vectorize करने के लिए कोई तरीका है , के, एक वेक्टर द्वारा, सी, इसे स्वतंत्र (3 डी मैट्रिक्स * स्केलर) संचालन में तोड़कर। मेरे पास पहले से ही इस फ़ंक्शन फ़ाइल में लूप के लिए दो अन्य अपरिहार्य हैं, और मैं लूप से बचने के लिए अपनी पूरी कोशिश कर रहा हूं।स्वतंत्र (3 डी मैट्रिक्स * 0D अदिश) में एक (4D मैट्रिक्स * 1 डी वेक्टर) आपरेशन टर्निंग छोरों

इस पर कोई अंतर्दृष्टि बहुत सराहना की जाएगी!

-SC

+0

ए लूप के लिए शायद 2 डी मैट्रिक्स से अधिक के लिए आपका सबसे अच्छा विकल्प है। – Bee

+0

मुझे डर था कि यह मामला हो सकता है। मैट्रिक्स अनुक्रमण के साथ खेलना कोशिश की; जैसे 'के ([3, 3; 3 3]) 'यह देखने के लिए कि क्या हुआ, लेकिन सुपर उलझन में आया। अगर यह वैसे भी नीचे जाने के लिए सही गली है तो सुनिश्चित करें। –

उत्तर

5

आप क्या कर सकते हैं इस का उपयोग करते हुए MTIMESX - जेम्स Tursa, मैटलैब की फाइल विदेशी मुद्रा में पाया द्वारा बहुआयामी समर्थन के साथ एक तेजी से आव्यूह गुणन उपकरण।

यह जितना आसान है:

C = mtimesx(A,B) 

करता गणना सी = एक * बी

+0

यह आशाजनक लग रहा है - धन्यवाद! प्रयास के लिए –

1

जब तक मैं कुछ याद कर रहा हूँ, इस bsxfun के लिए एक मामला है:

te=bsxfun(@times, k, permute(c,[3 4 1 2])); % c is a row vector 

या

te=bsxfun(@times, k, permute(c,[3 4 2 1])); % c is a column vector 

यह माना जा रहा है कि के चौथे आयाम में सी के समान आकार है। यदि नहीं, तो आप submatrix अनुक्रमण का उपयोग कर सकते हैं:

te=bsxfun(@times, k(:,:,:,1:length(c)), permute(c,[3 4 2 1])); % c is a column vector 
+0

+1 हालांकि वास्तविकता यह है कि लूप को हटाने और इसे एक लाइन कोड के साथ बदलने से हमेशा तेज़ नहीं होता है। उदाहरण के लिए लूप कोड के मूल के मुकाबले आपके कोड को चलाने के लिए 75% लंबा लगता है। – Bee

+0

10x10x10x10 और 10x10x10x5000 मैट्रिक्स पर 10000 परीक्षणों के लिए, bsxfun लूप के मुकाबले लगभग 10% धीमी गति से चलता है। सहमत है कि यह तेज़ नहीं है, लेकिन मैं परिमाण पर असहमत हूं;) –

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