如何通过特定规则在MATLAB中重新排列数组?

时间:2017-07-04 13:58:12

标签: arrays matlab

假设我有这个数组:

a = [1,2,3,4,5];

输出应该是这样的:

1,2,3,4,5
2,1,3,4,5
3,1,2,4,5
4,1,2,3,5
5,1,2,3,4

我该怎么做?此函数应对a的不同长度有效。

4 个答案:

答案 0 :(得分:9)

使用组合:

b = [a.' flipud(nchoosek(a,numel(a)-1))];

答案 1 :(得分:3)

一个简单的解决方案可以是:

primarySet = 1:5;
result = zeros(length(primarySet));
for i = 1: length(primarySet)
    temp = primarySet;
    temp(i) = [];
    result(i,:) = [primarySet(i) temp];
end

答案 2 :(得分:3)

另一种方式:

a = [10 20 30 40 50];
ind = 1:numel(a);
result = a(abs(sort(bsxfun(@times, ind, 1-2*eye(numel(ind))),2)));

给出

result =
    10    20    30    40    50
    20    10    30    40    50
    30    10    20    40    50
    40    10    20    30    50
    50    10    20    30    40

答案 3 :(得分:2)

另一种方式:

n = numel(a)-1;
b = [a(:) flipud(reshape(ndgrid(a,1:n).',[],n))];
b =

     1     2     3     4     5
     2     1     3     4     5
     3     1     2     4     5
     4     1     2     3     5
     5     1     2     3     4