2011-03-26 22 views
41

कहें कि हमारे पास आकार का मैट्रिक्स 100x3पंक्तियों का यादृच्छिक क्रम Matlab

आप MATLAB में पंक्तियों को कैसे घुमाएंगे?

+0

संभावित डुप्लिकेट [मैं MATLAB में एन बिंदुओं से यादृच्छिक रूप से के अंक कैसे चुनूं?] (Http://stackoverflow.com/questions/1856141/how-do-i-randomly-select-k-points-from- n-points-in-matlab) – Jonas

+2

यह चयन करने के बारे में नहीं है, यह "desorder" के बारे में है या मैट्रिक्स – cMinor

+1

की पंक्तियों को घुमाएं वास्तव में, आप सही हैं। यह बिल्कुल वही सवाल नहीं है। नीचे मेरा जवाब देखें। – Jonas

उत्तर

67

एक मैट्रिक्स की पंक्तियां शफ़ल के लिए, आपको RANDPERM

shuffledArray = orderedArray(randperm(size(orderedArray,1)),:); 

randperm उपयोग कर सकते हैं N यादृच्छिक मानों की सूची पैदा करते हैं और उन्हें सॉर्ट होगा, परिणाम के रूप में sort की दूसरी उत्पादन लौटने।

+3

आपका समाधान कम से कम मेरे कंप्यूटर पर 2.5x तेज है, कम से कम मेरे कंप्यूटर पर। – KnowledgeBone

5

यह मैटलैब के randsample फ़ंक्शन के माध्यम से मैट्रिक्स पंक्तियों के लिए एक नया यादृच्छिक अनुक्रमणिका बनाकर किया जा सकता है।

matrix=matrix(randsample(1:length(matrix),length(matrix)),:); 
+1

मुझे लगता है कि आप '' false'' का उपयोग करना चाहते हैं - यदि प्रतिस्थापन के साथ नमूनाकरण होता है, परिणामी मैट्रिक्स में डुप्लिकेट पंक्तियां होंगी, जबकि अन्य गायब हो जाएंगे। मामले के बिना नमूनाकरण के मामले में, 'randsample' कॉल' randperm', जो इस प्रकार 'रैंडपर्म' को सीधे कॉल करने से थोड़ा धीमा होना चाहिए। – Jonas

+0

फिक्स्ड, धन्यवाद जोनास। – KnowledgeBone

1

बड़े डेटासेट के लिए, आप कस्टम Shuffle समारोह

यह डी.ई. का उपयोग करता है का उपयोग कर सकते Knuth के शफल एल्गोरिदम (फिशर-येट्स भी कहा जाता है) और प्यारा KISS यादृच्छिक संख्या जेनरेटर (जी। Marsaglia)।

1

answer of Jonas पढ़ने के दौरान मुझे इसे पढ़ने में थोड़ा मुश्किल लग रहा था, समझना मुश्किल था। गणित में मुझे एक समान question मिला जहां उत्तर अधिक पढ़ने योग्य, समझने में आसान है।

function ret = shuffleRow(mat) 

[r c] = size(mat); 
shuffledRow = randperm(r); 
ret = mat(shuffledRow, :); 

वास्तव में यह Jonas' answer के रूप में एक ही बात करता है: विचार Mathworks से मैं एक समारोह में लिखा है ले रहा है। लेकिन मुझे लगता है कि यह समझने में आसान, थोड़ा और अधिक पठनीय है।

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