matlab:排序和随机

时间:2011-07-06 07:19:07

标签: matlab

我需要从1个巨大的原始矩阵中挑选出几个小矩阵...根据第1列的排序(第1列包含1,2或3)......

如果第1列为1,则随机75%的1保存在文件A1中,25%的1保存在文件A2中。

如果第一列是2,则随机75%的2保存在文件B1中,25%的2保存在文件B2中。

如果第一列是3,则随机75%的3保存在文件C1中,25%的3保存在文件C2中。

我将如何编写代码?

示例:

原始矩阵有15行x 6列:

第1列中有7行是1行,第1列中有5行是2行,第1列中有3行是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行中的75%(即7 * 0.75 = 5.25)为新矩阵(5rows x 6列),其余25%成为另一个新矩阵

5行在第1列中得到2,随机取出5行中的75%(即5 * 0.75 = 3.75)为新矩阵(4行x 6列),其余25%成为另一个新矩阵

3行在第1列中得到3,随机取出3行中的75%(即3 * 0.75 = 2.25)为新矩阵(2行x 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

1 个答案:

答案 0 :(得分: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,:);

希望它有所帮助。