我需要从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
答案 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,:);
希望它有所帮助。