elements/vectors/list 个向量的所有可能组合(笛卡尔积)

All possible combinations of the elements/vectors/list of vectors (Cartesian product)

我有几个向量或向量列表,想组成它们条目的所有可能串联。这是一个例子:

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 组合在一个元胞数组中(或任何其他更适合潜在解决方案的结构)。我通过编写字符串然后 evaling 解决了这个问题。但这对我来说似乎并不优雅。有没有可能让它更……算法化?

我正在使用 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

这与您显示的顺序略有不同,但我认为它对您仍然有用。