特定配置的matlab算法
matlab algorithm for specific configurations
如何在 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 < 30)
列表在我的代码中由二进制矩阵 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}
在此先感谢您的帮助。
正如@TroyHaskin 所说,ndgrid 是必经之路。最重要的是你只需要做一些预处理和 post 处理。
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));
如何在 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 < 30)
列表在我的代码中由二进制矩阵 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}
在此先感谢您的帮助。
正如@TroyHaskin 所说,ndgrid 是必经之路。最重要的是你只需要做一些预处理和 post 处理。
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));