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

  显示原文与译文双语对照的内容
61 3

我有几个向量或者向量列表,并想弥补它们的所有可能的concatenations 。 以下是一个示例:


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]



我认为我的问题与这个类似: 生成一些矢量( 笛卡尔乘积) 元素的可以能组合,但我不能调整我的问题的答案。

EDIT: 感谢你的回答和更正 ! 就像烧杯中已经提到的,它的作品在 Octave 中的魅力。 现在我还希望在细胞 array ( 或者任何其他适合潜在解决方案的结构) 中有一个任意数量的a 组合的灵活性。 我在编写一个字符串之后做了一个工作。 但这对我来说并不优雅。 有可能有更多的。 算法?

时间: 原作者:

123 1

为了同样的代码在 Octave 中同样工作,我正在使用MATLAB进行回答。

下面是一个基于你链接的问题的基于回答的解决方案:


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



这是一个稍有不同的顺序,但是我认为它仍然对你有用。

原作者:
...