从matlab中的值生成组合
如何为某个数字生成可能的不同组合 例如:从matlab中的值生成组合,matlab,combinations,Matlab,Combinations,如何为某个数字生成可能的不同组合 例如: m=2给出: [1 1;1 2;2 1;2 2] m=3给出: [11;12;13;21;22;23;31;32;32;33] 等等 使用perms([12])仅生成[12;21]您可以使用: 这里的A和B如下所示: A = 1 1 1 2 2 2 3 3 3 B = 1 2 3 1 2 3 1 2
m=2
给出:
[1 1;1 2;2 1;2 2]
m=3
给出:
[11;12;13;21;22;23;31;32;32;33]
等等
使用perms([12])
仅生成[12;21]
您可以使用:
这里的A
和B
如下所示:
A =
1 1 1
2 2 2
3 3 3
B =
1 2 3
1 2 3
1 2 3
P =
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
因此,您可以垂直连接它们以获得组合。使用冒号运算符将矩阵转换为列向量,即按列列出所有元素。因此,您可以使用
P = sortrows([A(:), B(:)])
或
以获得排序的组合
p现在看起来像这样:
A =
1 1 1
2 2 2
3 3 3
B =
1 2 3
1 2 3
1 2 3
P =
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
请注意,您的问题与以下内容高度相关,其中目标是从2个向量中找到组合:。我建议你也看看,以获得更多的想法
尽管如此,这个问题可能是重复的……无论如何,希望这能有所帮助。您可以使用:
这里的A
和B
如下所示:
A =
1 1 1
2 2 2
3 3 3
B =
1 2 3
1 2 3
1 2 3
P =
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
因此,您可以垂直连接它们以获得组合。使用冒号运算符将矩阵转换为列向量,即按列列出所有元素。因此,您可以使用
P = sortrows([A(:), B(:)])
或
以获得排序的组合
p现在看起来像这样:
A =
1 1 1
2 2 2
3 3 3
B =
1 2 3
1 2 3
1 2 3
P =
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
请注意,您的问题与以下内容高度相关,其中目标是从2个向量中找到组合:。我建议你也看看,以获得更多的想法
尽管如此,这个问题可能是重复的……无论如何,希望这能有所帮助。这有点棘手,因为
nchoosek
不能直接使用:
n = 3;
X = nchoosek([1:n, n:-1:1],2);
Y = unique(X,'rows','legacy');
分别在一行中:
Y = unique(nchoosek([1:n, n:-1:1],2),'rows','legacy');
这有点棘手,因为
nchoosek
不能直接使用:
n = 3;
X = nchoosek([1:n, n:-1:1],2);
Y = unique(X,'rows','legacy');
分别在一行中:
Y = unique(nchoosek([1:n, n:-1:1],2),'rows','legacy');
美好的我认为第三行有一个拼写错误;它应该是
唯一的(X,…)
而不是唯一的(Z,…)
?很好!我认为第三行有一个拼写错误;你甚至可以简化ndgrid
行,因为[A,B]=ndgrid(1:m)
是等价的。正如我们所做的那样:[B(:)A(:)]可以为你节省sortrows;-)ndgrid
方法是否适用于说“4-over-3”?还是仅仅是2d案例+1无论如何,因为它比我的更简单、更快。@Benoit_11:因为thewaywewalk也是一位母语为德语的人,这可能是“4über 3”的翻译问题,它应该翻译成“4选择3”,而不是“4对3”。@thewaywewalk:要将这种方法应用于一般的k
-值元组1:n
,我想这可以用:Cs=cell(1,k);[Cs{:}]=ndgrid(1:n);元组=重塑(cat(n+1,Cs{:}),n^k,[])代码>,但这比OP要求的要多。。。顺便说一句:我认为你的方法不适用于1:5=n的k=3元组。你甚至可以简化ndgrid
行,因为[A,B]=ndgrid(1:m)
是等效的。而我们现在的情况是:[B(:)A(:)]可以帮你省去排序;-)ndgrid
方法是否适用于说“4-over-3”?还是仅仅是2d案例+1无论如何,因为它比我的更简单、更快。@Benoit_11:因为thewaywewalk也是一位母语为德语的人,这可能是“4über 3”的翻译问题,它应该翻译成“4选择3”,而不是“4对3”。@thewaywewalk:要将这种方法应用于一般的k
-值元组1:n
,我想这可以用:Cs=cell(1,k);[Cs{:}]=ndgrid(1:n);元组=重塑(cat(n+1,Cs{:}),n^k,[])代码>,但这比OP要求的要多。。。顺便说一句:我认为你的方法不适用于1:5=n的k=3元组。这些实际上不是数学意义上的组合,因为[1,2]
和[2,1]
是一样的。而且它们不是排列,这就是为什么perms
不起作用的原因。这些实际上只是笛卡尔乘积的元组。这听起来可能过于精确,但如果您搜索此问题的解决方案,那么正确的名称会让您走得更远。您可以使用inputvectors={1:m,1:m}
生成所有元组(“组合”),或者等效地使用inputvectors={1:m1:m}
combs=fliplr(combvec(vectors{end:-1:1})。
执行相同操作。;-)可能重复@Amira如果答案帮助您解决了问题,请将其标记为已接受。谢谢这些实际上不是数学意义上的组合,因为[1,2]
和[2,1]
是相同的。而且它们不是排列,这就是为什么perms
不起作用的原因。这些实际上只是笛卡尔乘积的元组。这听起来可能过于精确,但如果您搜索此问题的解决方案,那么正确的名称会让您走得更远。您可以使用inputvectors={1:m,1:m}
生成所有元组(“组合”),或者等效地使用inputvectors={1:m1:m}
combs=fliplr(combvec(vectors{end:-1:1})。
执行相同操作。;-)可能重复@Amira如果答案帮助您解决了问题,请将其标记为已接受。谢谢