我需要从1个巨大的原始矩阵...according到排序第一列(第一列包含1,2或3)排序几个小矩阵……
如果第一列是1,则随机将1的75%保存在文件A1中,将1的25%保存在文件A2中。
如果第一列是2,那么2列中的75%随机保存在文件B1中,2列中的25%保存在文件B2中。
如果第一列是3,那么随机地将3列中的75%保存在文件C1中,将3列中的25%保存在文件C2中。
我该如何写代码呢?
示例:
原始矩阵有15行x 6列:
7行是第1列中的1,5行是第1列中的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.567行得到第1列中的1,随机抽取7行中的75% (这是7*0.75=5.25)作为新矩阵(5行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发布于 2011-07-06 17:39:19
以下是使用函数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,:);希望能有所帮助。
https://stackoverflow.com/questions/6592853
复制相似问题