fog*_*rit 5 matlab combinations
在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' ;
... }
Run Code Online (Sandbox Code Playgroud)
该命令将能够接受任意数量的参数,并且示例中的结果将具有与函数的参数一样多的列.(当然,上面的语法仅用于说明以及任何可以生成结果的方法,无论格式适合该法案)
编辑:类似的问题已被要求矩阵而不是细胞,例如链接.许多解决方案都指向FEX提交allcomb,但所有这些解决方案都只是围绕ndgrid的包装器,它只适用于双打.对非数字集的任何建议?
虽然我解决这个问题在我的回答到相关/近似重复的问题,我在这里发布不同版本的我的解决方案,因为它似乎你想要一个通用的解决方案,以及我的其他的答案是具体的三个输入集的情况.这是一个应该为任意数量的单元格数组输入做的事情:
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
Run Code Online (Sandbox Code Playgroud)
这就是你怎么称呼它:
>> combMat = allcombs(A, B)
combMat =
'a1' 'b1'
'a1' 'b2'
'a1' 'b3'
'a2' 'b1'
'a2' 'b2'
'a2' 'b3'
Run Code Online (Sandbox Code Playgroud)
双线策略:
A = {'a1','a2'};
B = {'b1','b2','b3'};
[a b]=ndgrid(1:numel(A),1:numel(B));
C= [A(a(:))' B(b(:))']
C =
'a1' 'b1'
'a2' 'b1'
'a1' 'b2'
'a2' 'b2'
'a1' 'b3'
'a2' 'b3'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2590 次 |
| 最近记录: |