我有几个向量或向量列表,并希望弥补其条目的所有可能的连接。这是一个例子:
a1=4;
a2=[1,6;1,9;6,9];
a3=[2;7];
这一切都应该导致:
[4,1,6,2]
[4,1,6,7]
[4,1,9,2]
[4,1,9,7]
[4,6,9,2]
[4,6,9,7]
我认为我的问题与此问题相似:Generate all possible combinations of the elements of some vectors (Cartesian product)但我无法对问题的答案进行调整。
修改
再次感谢您的回答和更正!正如烧杯已经说它的作品就像八度音阶的魅力。现在,我还想让它在单元格数组(或任何其他能更好地适应潜在解决方案的结构)中任意数量的a
更灵活一点。我编写了一个字符串然后eval
来完成它。但这对我来说似乎并不优雅。是否有可能让它更多...算法?
答案 0 :(得分:2)
我正在回答使用MATLAB,希望同样的代码也适用于Octave。
以下是您链接的问题中基于Amro's answer的解决方案:
a1=4;
a2=[1,6;1,9;6,9];
a3=[2;7];
nRows = [size(a1,1), size(a2,1), size(a3,1)];
[x,y,z] = ndgrid(1:nRows(1),1:(nRows(2)),1:(nRows(3)));
cartProd = [a1(x(:),:) a2(y(:),:) a3(z(:),:)];
结果是:
cartProd =
4 1 6 2
4 1 9 2
4 6 9 2
4 1 6 7
4 1 9 7
4 6 9 7
这与您展示的顺序略有不同,但我认为它对您仍然有用。