2011-07-06 101 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,:); 

希望它能帮助。