MATLAB 中是否有命令或单行策略可以返回以下组件的所有组合n
元胞数组,采取n
一次?
我想要完成的一个例子:
A = {'a1','a2'};
B = {'b1','b2','b3'};
C = combinations(A,B)
C = {'a1','b1' ;
'a1','b2' ;
'a1','b3' ;
'a2','b1' ;
'a2','b2' ;
... }
该命令将能够接受任意数量的参数,并且示例中的结果将具有与函数参数一样多的列。 (当然,上面的语法仅用于说明,任何可以生成结果的方法(无论格式如何)
编辑:对于矩阵而不是单元格提出了类似的问题,例如link。很多解决方案都指向FEX提交allcomb,但所有这些解决方案都只是 ndgrid 的包装,仅适用于双打。对于非数字集有什么建议吗?
虽然我在我的答案 to a 相关/接近重复的问题,我在这里发布了我的解决方案的不同版本,因为您似乎想要一个广义的解决方案,我的另一个答案特定于三个输入集的情况。这是一个函数,它应该对任意数量的元胞数组输入执行您想要的操作:
function combMat = allcombs(varargin)
sizeVec = cellfun('prodofsize', varargin);
indices = fliplr(arrayfun(@(n) {1:n}, sizeVec));
[indices{:}] = ndgrid(indices{:});
combMat = cellfun(@(c,i) {reshape(c(i(:)), [], 1)}, ...
varargin, fliplr(indices));
combMat = [combMat{:}];
end
您可以这样称呼它:
>> combMat = allcombs(A, B)
combMat =
'a1' 'b1'
'a1' 'b2'
'a1' 'b3'
'a2' 'b1'
'a2' 'b2'
'a2' 'b3'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)