matrix - Matlab: How to get all the possible different matrices by shifting it's rows (Update: each row has a different step) -
चलिए कहते हैं मेरे पास 3x5 मैट्रिक्स है
a = [1 2 4 7 5; 3 4 5 6 2; 6 7 1 2 3];
मुझे पंक्तियों को बदलकर सभी अलग-अलग मैट्रिक्स प्राप्त करना है।
मैंने लिखा कोड
a = [1 , 2,4,7,5, 3,4,5,6,2; 6,7,1,2,3]; जम्मू = 1: 3 के लिए मैं = 1: 5 ए (जे,:) = सर्कशीफ्ट (ए (जे,:), [i 1]); डिस्प (ए) एंड एंड
समस्या यह है कि मेरे पास 25 अलग-अलग मैट्रिक्स हों, लेकिन इसके बजाय मेरे पास 15 (I के 3 छोरों में से 5 छोरों के कारण) मैं कैसे कर सकता हूं इसे ठीक करें?
क्या ऐसा करने का एक सामान्य तरीका है (विशिष्ट आकार के मैट्रिक्स के लिए नहीं)
(EDIT)
मैंने देखा कि यह मेरे कार्यक्रम (10x24 मैट्रिक्स के लिए परिणाम बहुत बड़ा है) के लिए कुशल नहीं था, इसलिए मैंने कार्यक्रम को थोड़ा बदल दिया। नई समस्या:
कहें कि मेरे पास 3x6 मैट्रिक्स
a = [1 2 4 7 5 7; 3 4 5 6 2 9; 6 7 1 2 3 4];
मुझे पंक्तियों को बदलकर सभी अलग-अलग मैट्रिक्स प्राप्त करना है I लेकिन चाल यही है कि हर पंक्ति में एक अलग बदलाव कदम है। (एक अलग मैट्रिक्स के अंदर मूल्य से परिभाषित)
उदाहरण के लिए: पंक्ति 1 में 3 (2 अलग पंक्तियों) का एक चरण है: 1 2 4 7 5 7 और 7 5 7 1 2 4 पंक्ति 2 में एक कदम है 2 (3 अलग-अलग पंक्तियों): 3 4 5 6 2 9, 5 6 2 9 3 4 और 2 9 3 4 5 6 और पंक्ति 3 में तीन चरण (3 अलग-अलग पंक्तियाँ) हैं: 6 7 1 2 3 4 और 2 3 4 6 7 1
इसका मतलब है कि मेरे पास 2x3x2 = 12 अलग-अलग मैट्रिक्स होना चाहिए।
a = [1,2,4,7,5,7; 3 , 4,5,6,2,9; 6,7,1,2,3,4]; ख = [2,3,2]; जम्मू = 1: 3 के लिए यदि बी (जे) == 2 के लिए मैं = 1: 2 ए (जे,:) = सर्कशीफ्ट (ए (जे,:), [i 3]); डिस्प (ए) एंड एफेफ बी (जे) == 3 I = 1: 3 ए (जे,:) = सर्कशिफ्ट (ए (जे,:), [i 2]) के लिए; डिस्प (ए) एंड एंड
क्या मेरे परिणाम 3x6x12 मैट्रिक्स या एक (3 * 12) x6 मैट्रिक्स में प्राप्त करने का कोई तरीका है?
कैसे इस तरह एक रिकर्सिव फ़ंक्शन के बारे में:
function res = shift_all (a) res = shift_recurse (a, 1) , []); समारोह res = shift_recurse (ए, आर, मौजूदा) res = मौजूदा; एम = ए; मैं = 1 के लिए: आकार (ए, 2) अगर आर एंड एलटी; आकार (a, 1) res = shift_recurse (m, r + 1, res); Elseif r == आकार (ए, 1) res = cat (3, res, m); अंत एम (आर, :) = सर्कशीफ्ट (ए (आर,:), [1 आई]);
और कॉलिंग res = shift_all (a)
परिणाम के एक 3x5x125 मैट्रिक्स पैदा करता है।
Comments
Post a Comment