2012-12-06 16 views
7

मेरे पास आकार 64500x17 का मैट्रिक्स है। यह पता लगाए गए टेक्स्टन फीचर्स का प्रतिनिधित्व करता है जिन्हें मुझे kmeans के लिए 5 सेंट्रॉइड खोजने के लिए उपयोग करना है।कई बराबर भागों में एक मैटलैब मैट्रिक्स को विभाजित करना

क्या मैं जरूरत है:

  • विभाजन 5 12900x17 मैट्रिक्स
  • में इस मैट्रिक्स साधन
  • एक 5x17 मैट्रिक्स में इन जोड़ kmeans की शुरुआत पैरामीटर के लिए में खिलाने के लिए लगता है।

मैं कैसे लगभग सब कुछ (cat, kmeans, आदि) करने के लिए पता है, लेकिन मैं केवल 5 भागों में मैट्रिक्स बंटवारे, या संक्षेप/इच्छित आकार में विभाजित के लिए एक विधि को खोजने के लिए कोशिश कर रहा हूँ।

मुझे बिल्कुल आवश्यक होने तक लूप (दक्षता के कारण) के लिए अति प्रयोग करने से मना कर दिया गया है।

मुझे अन्य प्रश्नों में कोई प्रासंगिक उदाहरण नहीं मिल रहा है, इसलिए यदि इसका उत्तर दिया गया है, तो कृपया मेरे साथ भालू।

उत्तर

1

पहले submatrix उपयोग पेट के अंकन लेने के लिए:

A(1:12900,:) 

तो

A(12901:12900*2,:) 

और इतने पर।

3

बस आसान से निपटने के लिए अनुक्रमण का उपयोग करें और कोशिकाओं में निकाले मैट्रिक्स की दुकान:

joined_means = cell2mat(splitted_data_means); 

या बस के लिए बिल्ली-की यह-साथ:

data = rand(64500,17); 
Nsubsets = 5; 
Nsubsize = size(data,1)/Nsubsets; 

splitted_data = cell(Nsubsets ,1); 
splitted_data_means = cell(Nsubsets,1); 

for ii=1:Nsubsets 
    splitted_data{ii} = data((ii-1)*Nsubsize + (1:Nsubsize),:); 
    splitted_data_means{ii} = mean(splitted_data{ii}); 
end 

आप तो इन साधनों के साथ शामिल हो सकते हैं एक लाइनर:

joined_means = cell2mat(arrayfun(@(ii) mean(data((ii-1)*12900+(1:12900),:)),(1:5)','uni',false)); 

जो @ angainor केसाथ और भी आसान हो जाएगा:

joined_means = cell2mat(cellfun(@mean,mat2cell(data, 12900*ones(5,1), 17),'uni',false)); 
5

आप mat2cell और इस oneliner

C = mat2cell(A, repmat(12900, 5, 1), 17); 

उपयोग कर सकते हैं mat2cell को दूसरा पैरामीटर मैट्रिक्स की पंक्ति विभाजन है।

C = 

[12900x17 double] 
[12900x17 double] 
[12900x17 double] 
[12900x17 double] 
[12900x17 double] 

और आंशिक मैट्रिक्स के रूप में

C{1} etc. 
+1

'repmat' या' 12900 * वाले (5,1) ' –

1

शायद सबसे तेजी से समाधान है पहुँचा जा सकता है:

data = rand(64500,17); 
Nsubsets = 5; 
Nsubsize = size(data,1)/Nsubsets; 
joined_means=squeeze(mean(reshape(data,Nsubsize,Nsubsets,size(data,2)),1)); 

स्प्लिट पहली और

अब C एक सेल सरणी है दूसरा आयाम, तो आप Nsubsets ele के पहले आयाम पर माध्य की गणना कर सकते हैं प्रत्येक मीटर।

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