Matlab中的2x2数组置换

Matlab中的2x2数组置换,matlab,permutation,Matlab,Permutation,我目前正在做一个项目,我有一个数组,我想在不使用数组的情况下对所有元素进行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

我目前正在做一个项目,我有一个数组,我想在不使用数组的情况下对所有元素进行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
7
,等等)

当顺序重要时,您可以通过先沿列排序,然后获取唯一的行来删除重复项

out = unique(sort(out, 2), 'rows')

%    1     3
%    1     5
%    1     7
%    3     5
%    3     7
%    5     7

使用
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
7
,等等)

当顺序重要时,您可以通过先沿列排序,然后获取唯一的行来删除重复项

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
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
但是,如果您想要真正独特的组合,请使用
combnk

例如:

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
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

如果您想要重复组合(顺序很重要),请使用
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
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
但是,如果您想要真正独特的组合,请使用
combnk

例如:

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
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