生成某些向量元素的所有可能组合(笛卡尔积)我想要生成给定数量的向量元素的所有可能组合。例如,对于[1 2], [1 2]和[4 5]我想要生成元素:[1 1 4; 1 1 5; 1 2 4; 1 2 5; 2 1 4; 2 1 5; 2 2 4; 2 2 5]问题是,我不知道需要计算组合的向量的数量。在这种情况下可能有3,或者可能有10,我需要一个泛化..你能帮我用MATLAB吗?是否已经有可执行此任务的预定义函数?
3 回答
慕哥6287543
TA贡献1831条经验 获得超10个赞
sets = {[1 2], [1 2], [4 5]};[x y z] = ndgrid(sets{:});cartProd = [x(:) y(:) z(:)];cartProd = 1 1 4 2 1 4 1 2 4 2 2 4 1 1 5 2 1 5 1 2 5 2 2 5
function result = cartesianProduct(sets) c = cell(1, numel(sets)); [c{:}] = ndgrid( sets{:} ); result = cell2mat( cellfun(@(v)v(:), c, 'UniformOutput',false) );end
cartProd = sortrows(cartProd, 1:numel(sets));
{[1 1] [1 2] [4 5]}
sets = cellfun(@unique, sets, 'UniformOutput',false);
杨魅力
TA贡献1811条经验 获得超6个赞
ndgrid
如果您有神经网络工具箱:使用 如果你做了 不
拥有工具箱,就像通常的情况一样:下面是将笛卡儿积推广到任意数量集合的另一种方法。
v{:}
ndgrid
cellfun
cell2mat
cat
:
N = numel(a);v = cell(N,1);[v{:}] = ndgrid(a{:});res = reshape(cat(N+1,v{:}),[],N);
cat
reshape
添加回答
举报
0/150
提交
取消