【问题标题】:All possible combinations of the elements/vectors/list of vectors (Cartesian product)元素/向量/向量列表的所有可能组合(笛卡尔积)
【发布时间】:2017-04-01 07:43:11
【问题描述】:

我有几个向量或向量列表,并希望将它们的条目所有可能的串联。这是一个例子:

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 它。但这对我来说似乎不太优雅。是否有可能让它更多......算法?

【问题讨论】:

  • 你的意思是最后两个输出中的6,9
  • @LuisMendo 说“是”很安全...

标签: matlab vector octave permutation cartesian-product


【解决方案1】:

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

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

【讨论】:

  • 在 Octave 中运行良好。 :)
猜你喜欢
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
  • 2018-09-28
  • 2023-03-29
  • 2013-05-10
  • 2015-04-16
相关资源
最近更新 更多