Matlab 中的 2x2 数组置换,无循环
2x2 Array Permutation in Matlab with no loop
我目前正在做一个项目,我有一个数组,我想在不使用数组的情况下对所有元素进行 2x2 排列
我有这样的东西:
A = [ 1 , 3 , 5 , 7]
我想要这样的东西
1 1
1 3
1 5
1 7
3 1
3 3
3 5
3 7
5 1
5 3
5 5
5 7
7 1
7 3
7 5
7 7
我也很想获得一个函数,我可以在其中选择一个数字是否可以自行排列(egg: no 77 66 55)或者顺序是否重要(egg:5 3 等于 3 5,因此仅在条目)
您可以使用 meshgrid
轻松做到这一点
[x,y] = meshgrid(A, A);
out = [x(:), y(:)];
% 1 1
% 1 3
% 1 5
% 1 7
% 3 1
% 3 3
% 3 5
% 3 7
% 5 1
% 5 3
% 5 5
% 5 7
% 7 1
% 7 3
% 7 5
% 7 7
您可以删除自我匹配(即 5 5
、7 7
等)
out(out(:,1) == out(:,2),:) = []
% 1 3
% 1 5
% 1 7
% 3 1
% 3 5
% 3 7
% 5 1
% 5 3
% 5 7
% 7 1
% 7 3
% 7 5
当顺序很重要时,您可以删除重复项,方法是先按列排序,然后取唯一的行
out = unique(sort(out, 2), 'rows')
% 1 3
% 1 5
% 1 7
% 3 5
% 3 7
% 5 7
如果您想重复组合(顺序很重要),请使用 perms
并为前两列取 unique
行。
示例:
A = [ 1 , 3 , 5 , 7]
R = perms(A)
unique(R(:,1:2), 'rows')
ans =
1 3
1 5
1 7
3 1
3 5
3 7
5 1
5 3
5 7
7 1
7 3
7 5
如果您想要真正独特的组合,请使用 combnk
示例:
A = [ 1 , 3 , 5 , 7]
combnk(A, 2) % all combinations using 2 elements
ans =
5 7
3 7
3 5
1 7
1 5
1 3
我目前正在做一个项目,我有一个数组,我想在不使用数组的情况下对所有元素进行 2x2 排列 我有这样的东西:
A = [ 1 , 3 , 5 , 7]
我想要这样的东西
1 1
1 3
1 5
1 7
3 1
3 3
3 5
3 7
5 1
5 3
5 5
5 7
7 1
7 3
7 5
7 7
我也很想获得一个函数,我可以在其中选择一个数字是否可以自行排列(egg: no 77 66 55)或者顺序是否重要(egg:5 3 等于 3 5,因此仅在条目)
您可以使用 meshgrid
[x,y] = meshgrid(A, A);
out = [x(:), y(:)];
% 1 1
% 1 3
% 1 5
% 1 7
% 3 1
% 3 3
% 3 5
% 3 7
% 5 1
% 5 3
% 5 5
% 5 7
% 7 1
% 7 3
% 7 5
% 7 7
您可以删除自我匹配(即 5 5
、7 7
等)
out(out(:,1) == out(:,2),:) = []
% 1 3
% 1 5
% 1 7
% 3 1
% 3 5
% 3 7
% 5 1
% 5 3
% 5 7
% 7 1
% 7 3
% 7 5
当顺序很重要时,您可以删除重复项,方法是先按列排序,然后取唯一的行
out = unique(sort(out, 2), 'rows')
% 1 3
% 1 5
% 1 7
% 3 5
% 3 7
% 5 7
如果您想重复组合(顺序很重要),请使用 perms
并为前两列取 unique
行。
示例:
A = [ 1 , 3 , 5 , 7]
R = perms(A)
unique(R(:,1:2), 'rows')
ans =
1 3
1 5
1 7
3 1
3 5
3 7
5 1
5 3
5 7
7 1
7 3
7 5
如果您想要真正独特的组合,请使用 combnk
示例:
A = [ 1 , 3 , 5 , 7]
combnk(A, 2) % all combinations using 2 elements
ans =
5 7
3 7
3 5
1 7
1 5
1 3