从 matlab 中的值生成组合

generate Combinations from a value in matlab

如何为特定数字生成可能的不同组合 示例:

m=2 给出:

[1 1;1 2;2 1;2 2]

m=3 给出: [1 1;1 2;1 3;2 1;2 2;2 3;3 1;3 2;3 3] 等等...

使用 perms([1 2]) 仅生成 [1 2;2 1]

您可以使用 ndgrid:

m = 3;

[A,B] = ndgrid(1:m);

此处 AB 看起来像这样:

A =

     1     1     1
     2     2     2
     3     3     3


B =

     1     2     3
     1     2     3
     1     2     3

因此您可以将它们垂直连接以获得组合。使用冒号运算符将矩阵转换为列向量,即按列列出所有元素。因此,您可以使用

P = sortrows([A(:), B(:)])

P = [B(:) A(:)] %// Thanks @knedlsepp :)

获取排序组合。

P 现在看起来像这样:

P =

 1     1
 1     2
 1     3
 2     1
 2     2
 2     3
 3     1
 3     2
 3     3

请注意,您的问题与以下内容高度相关,目标是从 2 个向量中找到组合。:How to generate all pairs from two vectors in MATLAB using vectorised code?。我建议你也看看它以获得更多想法。

话虽这么说,这个问题可能是重复的...无论如何希望能有所帮助。

有点棘手,因为 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');