如何根据Matlab中的删除选择生成分组编号?

时间:2013-12-21 01:25:17

标签: matlab loops matrix

假设我在数据中有一个从1到85的整数序列集:

data = [1:1:85];

如果我选择removeselection = 0,则answer应该等于数据(所有数字从1到85)。

如果我选择removeselection = 1,则应该回答85组数据。

data1 = [2:1:85] %remove number 1;
data2 = data(:,2) = []; %remove number 2
data3 = data(:,3) = []; %remove number 3
.
.
.
data85 = data(85,:) = []; %remove number 85

如果我选择removeselection = 2,则answer应删除2个数字并生成85(84)组数据。

如果我选择removeselection = 84,则答案应为85组由单个数字组成。

data1 = [1];
data2 = [2];
data3 = [3];
.
.
.
data85 = [85];

如果我选择removeselection = 85,则答案应该等于0

该功能应该允许用户将删除次数从0到最大数字放在85的数据中。

请就此事帮助我。我真的坚持这个xD

1 个答案:

答案 0 :(得分:2)

以下是使用nchoosek的一行解决方案。但请注意,正如我在评论中所说,数据组的数量可能会变得非常大。

data = [1:1:6]; %// example data
removeSelection = 3; %// how many data to remove

groupsOfData = data(nchoosek(data,numel(data)-removeSelection));

在示例中,结果是:

groupsOfData =

     1     2     3
     1     2     4
     1     2     5
     1     2     6
     1     3     4
     1     3     5
     1     3     6
     1     4     5
     1     4     6
     1     5     6
     2     3     4
     2     3     5
     2     3     6
     2     4     5
     2     4     6
     2     5     6
     3     4     5
     3     4     6
     3     5     6
     4     5     6

如果数据组太多而您想随机抽样(正如您在评论中所述),则可以使用randsample

randomGroupOfData = randsample(data,numel(data)-removeSelection);