Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在MATLAB中按照特定规则重新排列数组?_Arrays_Matlab - Fatal编程技术网

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我想下面的答案涵盖了我的问题。