如何在matlab中有效实现这个特定的组合问题?
我列出了可能的值{{v1_1,... v1_n1},{v2_1,...,v2_n2},... {vm_1,...,vm_nm}}。我需要以这种方式生成所有可能的配置:
列表示例
{{1,2},{3},{2,5}}
和相应的配置
1 3 2
1 3 5
2 3 2
2 3 5
在我的情况下,max(n1,...,nm)= 6并且m是小整数(3 列表在我的代码中用二进制矩阵m x 6 示例(3 x 6案例):
{{1,2},{3},{2,5}} 相应的二进制矩阵 提前感谢您的帮助。 1 1 0 0 0 0 ... {1,2}
0 0 1 0 0 0 ... {3}
0 1 0 0 1 0 ... {2,5}
答案 0 :(得分:0)
就像@TroyHaskin所说,ndgrid是要走的路。最重要的是,你只需要进行一些前期和后期处理。
x = {{1,2}, {3}, {2,5}};
a = cellfun(@cell2mat, x, 'UniformOutput', 0);
b = cell(size(a));
[b{:}] = ndgrid(a{:});
c = cellfun(@squeeze, b, 'UniformOutput', 0);
d = cell2mat(cellfun(@(x) reshape(x, [], 1), c,'uni',0));