Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从matlab中的值生成组合_Matlab_Combinations - Fatal编程技术网

从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
不起作用的原因。这些实际上只是笛卡尔乘积的元组。这听起来可能过于精确,但如果您搜索此问题的解决方案,那么正确的名称会让您走得更远。您可以使用input
vectors={1:m,1:m}
生成所有元组(“组合”),或者等效地使用input
vectors={1:m1:m}
combs=fliplr(combvec(vectors{end:-1:1})。
执行相同操作。;-)可能重复@Amira如果答案帮助您解决了问题,请将其标记为已接受。谢谢这些实际上不是数学意义上的组合,因为
[1,2]
[2,1]
是相同的。而且它们不是排列,这就是为什么
perms
不起作用的原因。这些实际上只是笛卡尔乘积的元组。这听起来可能过于精确,但如果您搜索此问题的解决方案,那么正确的名称会让您走得更远。您可以使用input
vectors={1:m,1:m}
生成所有元组(“组合”),或者等效地使用input
vectors={1:m1:m}
combs=fliplr(combvec(vectors{end:-1:1})。
执行相同操作。;-)可能重复@Amira如果答案帮助您解决了问题,请将其标记为已接受。谢谢