2011-07-06 145 views
1

我需要從1點巨大原始矩陣理清幾個小矩陣...根據排序第一列(第一列含有任1,2或3)...MATLAB:排序和隨機

如果第一列爲1,然後隨機選擇75%的1保存在文件A1中,25%保存在文件A2中。

如果第一列爲2,則隨機選擇75%的2保存在文件B1中,25%的2保存在文件B2中。

如果第一列爲3,則隨機選擇文件C1中3個保存的75%,文件C2中3個保存的25%。

我該怎麼寫代碼?

實施例:

原始矩陣15已行×6列:

7行是第1列1,行5是在第一列2和3行第1列是3。

1 -0.05 -0.01 0.03 0.07 0.11 

1 -0.4 -0.36 -0.32 -0.28 -0.24 

1 0.3 0.34 0.38 0.42 0.46 

1 0.75 0.79 0.83 0.87 0.91 

1 0.45 0.49 0.53 0.57 0.61 

1 0.8 0.84 0.88 0.92 0.96 

1 0.05 0.09 0.13 0.17 0.21 

2 0.5 0.54 0.58 0.62 0.66 

2 0.4 0.44 0.48 0.52 0.56 

2 0.9 0.94 0.98 1.02 1.06 

2 0.85 0.89 0.93 0.97 1.01 

2 0.75 0.79 0.83 0.87 0.91 

3 0.36 0.4 0.44 0.48 0.52 

3 0.6 0.64 0.68 0.72 0.76 

3 0.4 0.44 0.48 0.52 0.56 

7行第1列有1,隨機取出的7行(也就是7 * 0.75 = 5.25)75%是新的矩陣(5rows×6列),25%的其餘部分成爲另一新矩陣

5列在第1列中得到2,隨機抽取5行(即5 * 0.75 = 3.75)的75%作爲新矩陣(4行×6列),其餘25%成爲另一新矩陣

3行第一列取3,隨機抽取3行(即3 * 0.75 = 2.25)的75%爲新矩陣(2行×6列),其餘25%成爲另一個新矩陣

結果:

A1= 

1 -0.4 -0.36 -0.32 -0.28 -0.24 

1 0.3 0.34 0.38 0.42 0.46 

1 0.75 0.79 0.83 0.87 0.91 

1 0.8 0.84 0.88 0.92 0.96 

1 -0.05 -0.01 0.03 0.07 0.11 

B1= 

2 0.9 0.94 0.98 1.02 1.06 

2 0.85 0.89 0.93 0.97 1.01 

2 0.5 0.54 0.58 0.62 0.66 

2 0.75 0.79 0.83 0.87 0.91 

C1= 

3 0.36 0.4 0.44 0.48 0.52 

3 0.4 0.44 0.48 0.52 0.56 
+0

你能澄清你的問題嗎?也許舉個例子吧? –

+0

類似問題:http://stackoverflow.com/questions/6501922/sample-specific-rows-in-matlab – Amro

回答

1

這裏是使用功能randperm一個可能的解決問題的方法:

% Create matrices 
firstcol=ones(15,1); 
firstcol(8:12)=2; 
firstcol(13:15)=3; 
mat=[firstcol rand(15,5)]; 
% Sort according to first column 
A=mat(mat(:,1)==1,:); 
B=mat(mat(:,1)==2,:); 
C=mat(mat(:,1)==3,:); 
% Randomly rearrange lines 
A=A(randperm(size(A,1)),:); 
B=B(randperm(size(B,1)),:); 
C=C(randperm(size(C,1)),:); 
% Select first 75% lines (rounding) 
A1=A(1:round(0.75*size(A,1)),:); 
A2=A(round(0.75*size(A,1))+1:end,:); 
B1=B(1:round(0.75*size(B,1)),:); 
B1=B(round(0.75*size(B,1))+1:end,:); 
C1=C(1:round(0.75*size(C,1)),:); 
C1=C(round(0.75*size(C,1))+1:end,:); 

希望它能幫助。