用于特定配置的matlab算法

时间:2015-05-22 13:14:06

标签: matlab combinatorics

如何在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}

提前感谢您的帮助。

1 个答案:

答案 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));