2013-10-15 15 views
5

का उपयोग करते हुए 3 डी मैट्रिक्स के फ्लिप बाएं-दाएं का फ्लिप-राइट का वेक्टरनाइज़ेशन मेरे पास एक फिल्म का 3 डी मैट्रिक्स है (आकार जे * के * एल के मैट्रिक्स M कहें)। मैं प्रत्येक फ्रेम को बाएं दाएं फ्लिप करना चाहता हूं। fliplr(M) का उपयोग M के रूप में काम नहीं करता है 2-डी मैट्रिक्स होना चाहिए। मुझे पता है कि मैं निम्नलिखित के लिए लूप का उपयोग कर सकता हूं:मैटलैब

for ii=1:size(M,3) 
    M(:,:,ii)=fliplr(M(:,:,ii)) 
end 

क्या यह "वेक्टरकृत" तरीका है?

अधिक आम तौर पर बोलते हुए, इस मामले में मैटलैब के मैट्रिक्स मैनिपुलेशन (flipud, repmat, आदि) में से कोई भी "वेक्टरकृत" तरीका है?

उत्तर

4

वैकल्पिक रूप से, आप सरल अनुक्रमण का उपयोग कर सकते हैं:

>> M = rand(3,4,5); 
>> M(:, end:-1:1, :); 

यह एक बहुत तेजी से और कम संसाधनों flipdim से गहन है, और मैं एक बहुत क्लीनर भी लगता है।

हालांकि, कुछ लोगों के लिए, end कीवर्ड के इस विशेष उपयोग भ्रामक है, है इसलिए यदि आप उन लोगों में से एक रहे हैं, flipdim ठीक करना होगा :)

+0

धन्यवाद, यह पूर्ण ज्ञान देता है और मुझे यह भी बेहतर लगता है! कम विशेष matlab कार्यों मुझे बेहतर याद करने की जरूरत है। –

+0

यह एक बिल्कुल वैध विकल्प है - व्यक्तिगत रूप से मैं 'फ्लिपडिम' पसंद करता हूं क्योंकि यह मुझे बताता है कि यह वास्तव में क्या कर रहा है। उपर्युक्त कोड को देखने से मुझे सोचना पड़ता है ... यह लिखना आसान हो सकता है (फ़ंक्शन नाम याद रखना नहीं है), दूसरा पढ़ना आसान है। एसओ के बारे में अच्छी बात यह है कि आपको दोनों जवाब मिलते हैं, और आप चुन सकते हैं। – Floris

4

मुझे लगता है कि आप के लिए

M = flipdim(M, 2); 

यह आयाम आप दूसरा पैरामीटर के रूप में निर्दिष्ट के साथ एक एन आयामी मैट्रिक्स flips देख रहे हैं। इस प्रकार, flipud

M = flipdim(M, 1); 

सुनिश्चित नहीं हैं कि साथ जहां repmat सवाल के साथ जा रहे हैं प्रतिस्थापित किया जा सकता है, लेकिन मैं अक्सर मैं bsxfun बजाय repmat का उपयोग कर सकते हैं। इसे देखो।

+1

आह, तुम 9 सेकंड से समझ में आ गया। आपके लिए +1, आपको इसकी आवश्यकता नहीं है। ;) – chappjc