我如何只组合矢量 - Matlab

时间:2015-04-16 20:50:36

标签: arrays matlab

如何在Matlab中将小向量子集中的所有向量组合起来?

a= [5 6 7] b = [8 9 10] c=[11 12 13] d=[14 15 16] e=[17 18 19]

与b和c组合:

结果:

M1= [ 5 6 7 8 9 10 11 12 13]

a with b and d:

M2 = [5 6 7 8 9 10 14 15 16]

依旧.....

3 个答案:

答案 0 :(得分:2)

这个答案涵盖了任意数量的向量的情况。假设向量是相等长度的行向量。

将您的示例数据定义为

a = [5 6 7]; b = [8 9 10]; c = [11 12 13]; d = [14 15 16]; e = [17 18 19];
vectors = {a, b, c, d, e}; %// cell array with any number of row vectors of equal size
n = 3; %// desired subset size

然后:生成索引的所有组合,使用它来索引到vectors,连接成一个大行向量,并重新整形以获得所需的结果:

combs = nchoosek(1:numel(vectors), n);
result = reshape([vectors{combs.'}], numel(vectors{1})*n, []).';

这会给出一个矩阵,其第一行是M1,第二行是M2等:

result =
     5     6     7     8     9    10    11    12    13
     5     6     7     8     9    10    14    15    16
     5     6     7     8     9    10    17    18    19
     5     6     7    11    12    13    14    15    16
     5     6     7    11    12    13    17    18    19
     5     6     7    14    15    16    17    18    19
     8     9    10    11    12    13    14    15    16
     8     9    10    11    12    13    17    18    19
     8     9    10    14    15    16    17    18    19
    11    12    13    14    15    16    17    18    19

答案 1 :(得分:1)

您可以使用cat功能:

res = cat(2,a,b,c);

或只是[]语法:

res = [a b c];

在这两种情况下,res都会包含[5 6 7 8 9 10 11 12 13]

最佳,

答案 2 :(得分:0)

使用nchoosek

a = [5 6 7]; b = [8 9]; c = [11 12 13]; d = [14 15 16]; e = [17 18 19];
N = 3;
x = {a,b,c,d,e};
y = nchoosek(x,N);

您在阵列数组中一次将所有数组组合N。单元格i的每一行x都是一个组合,所以要将其作为行向量返回

horzcat(y{i,:})

或者,如果你想把它们全部拿出并放在一个大小为n_combs的单元格数组中

n_combs = size(y,1);
out = cell(0,n_combs);
for i = 1 : n_combs
    out{i} = horzcat(1, y{i,:});
end

您要组合的数组大小没有限制,例如,您可以组合

a = [5 7]; b = [8 9]; c = [11]; d = [20 14 15 16]; e = [17 18 19];

但是,如果必须将所有组合放在矩阵中,则阵列必须具有相同的大小。在这种情况下,路易斯·门多的回答可以胜任。

最后,如果允许重复,请使用nmultichoosek代替nchoosek