Arrays 如何在MATLAB中按照特定规则重新排列数组?
假设我有这个数组:Arrays 如何在MATLAB中按照特定规则重新排列数组?,arrays,matlab,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 一个简单的解决方案可以是: primarySet = 1:5; result = zeros(length(primarySet)); for i = 1: length(primarySet) temp = primarySet; temp(i) = [];
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
一个简单的解决方案可以是:
primarySet = 1:5;
result = zeros(length(primarySet));
for i = 1: length(primarySet)
temp = primarySet;
temp(i) = [];
result(i,:) = [primarySet(i) temp];
end
使用组合法:
b = [a.' flipud(nchoosek(a,numel(a)-1))];
另一种方式:
a = [10 20 30 40 50];
ind = 1:numel(a);
result = a(abs(sort(bsxfun(@times, ind, 1-2*eye(numel(ind))),2)));
n = numel(a)-1;
b = [a(:) flipud(reshape(ndgrid(a,1:n).',[],n))];
给予
还有另一种方式:
a = [10 20 30 40 50];
ind = 1:numel(a);
result = a(abs(sort(bsxfun(@times, ind, 1-2*eye(numel(ind))),2)));
n = numel(a)-1;
b = [a(:) flipud(reshape(ndgrid(a,1:n).',[],n))];
perms
是您要找的吗?还是说你想保持原来的顺序,但希望每个元素在第一个位置都有一次的规则?@LeanderMoesinger,我不这么认为。结果是不同的。上面的输出基于一个特定的规则(考虑上面输出的第一列)。啊,我认为这只是一些随机的例子。如果你需要对不同长度的向量这样做,你可以展示“知道它”的分析规则。你能澄清一下你是如何创建这个矩阵的吗?或者例如,如何为1x4向量或1x6创建相同的矩阵?@Mikhail_Sam我想下面的答案涵盖了我的问题。