首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matlab:排序和随机

matlab:排序和随机
EN

Stack Overflow用户
提问于 2011-07-06 15:19:07
回答 1查看 651关注 0票数 1

我需要从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。

代码语言:javascript
复制
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)作为新矩阵(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%成为另一个新矩阵

结果:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-06 17:39:19

以下是使用函数randperm解决问题的一种可能方案

代码语言:javascript
复制
% 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,:);

希望能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6592853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档