matlab 编程 列举从a数组集合中选出m个数组进行全排列的结果。

比如:集合数组a=[a1,a2,a3,a4],从中选出2个数组全排列的结果是[a1;a2] [a1;a3] [a1;a4] [a2;a3] [a2;a4][a3;a4]。(其中各数组a1,a2,a3,a4的行数不相等,列数相同)

cc = 2;  % 每个数组列数
M = 4;   % 数组个数
for k = 1:M
    rr = fix(4*rand)+1; % 随机行数
    a{k} = rand(rr,cc);
end
% 前面是生成实验数据,有数据就不用了
% 有数据 a
% M = size(a,1);
m = 2;     % m <= M
id = nchoosek(1:M,m);
for k = 1:size(id,1)
    temp = [];
    for p = 1:m 
        temp = [temp; a{id(k,p)}];
    end
    R{k} = temp;
end

追问

谢谢你的答案,我想问怎么将a=[a1,a2,a3,a4],表示成你代码里的a{k}。还有将得到的新组合的数组与原未组合的数组生成新的数组,怎么弄呢。比如:你代码里得到的新数组R{k1},(由a1,a2组合而成),怎样形成新的数组b=[R;a3;a4].(a3,a4是为原a数组集合里的)

温馨提示:答案为网友推荐,仅供参考
相似回答