开发者

matlab: sorting and random

I need to sort out few small matrices from 1 huge raw matrix ...according to sorting 1st column (1st column contain either 1, 2, or 3)...

if 1st column is 1, then randomly 75% of the 1 save in file A1, 25% of the 1 save in file A2.

if 1st column is 2, then randomly 75% of the 2 save in file B1, 25% of the 2 save in file B2.

if 1st column is 3, then randomly 75% of the 3 save in file C1, 25% of the 3 save in file C2.

how am i going to write the code?

Example:

a raw matrix has 15 rows x 6 columns:

7 rows are 1 in 1st column, 5 rows are 2 in 1st column, and 3 rows are 3 in 1st column.

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 rows got 1 in 1st column, randomly take out 75% of 7 rows (which is 7*0.75=5.25) to be new matrix (5rows x 6 columns), the rest of 25% become another new matrix

5 rows got 2 in 1st column, randomly take out 75% of 5 rows (which is 5*0.75=3.75) to be new matrix (4rows x 6 columns), the rest of 25% become another new matrix

3 rows got 3 in 1st column, randomly take out 75% of 3 rows (which is 3*0.75=2.25) to be new matrix (2rows x 6 columns), the rest of 25% become another new matrix

Result:

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


here is one possible solution to your problem using the function 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,:);

Hope it helps.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜