从 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);
此处 A
和 B
看起来像这样:
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');
如何为特定数字生成可能的不同组合 示例:
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);
此处 A
和 B
看起来像这样:
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');