更改编号排序/编号顺序

时间:2018-11-13 17:00:41

标签: matlab sequence octave

我有一个数组/数字序列a=[1,2,3,4,5],我正在尝试 创建一个类似于下面的a_new的数组/数字序列: 代表数字应输入的订单/索引。

a_new=...
[1,2,3,4,5;
2,1,2,3,4;
3,3,1,2,3;
4,4,4,1,2;
5,5,5,5,1]

我的想法是在circshift处使用,但很快发现这行不通。

a=[1,2,3,4,5];
for n=1:5
  a_wrong(:,n)=circshift(a(:)',[0 n])(:)
end

产生

a_wrong=[
    5   4   3   2   1
    1   5   4   3   2
    2   1   5   4   3
    3   2   1   5   4
    4   3   2   1   5]

有什么想法吗?如果那行不通,则不需要使用circshift

PS:我正在使用与Matlab相似的Octave 4.2

3 个答案:

答案 0 :(得分:4)

可能有很多不同的方法来生成此矩阵。这是使用repmattoeplitztriltriu函数的一个:

>> a_new = tril(repmat(a.', 1, numel(a)), -1)+triu(toeplitz(a))

a_new =

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

答案 1 :(得分:1)

我不确定内置函数,但这应该可行;

expect(checkbox.checked).toBe(true)

我的计算机上未安装Octave或MATLAB,因此无法对其进行测试。这可能有一个愚蠢的错误,请原谅我!

答案 2 :(得分:1)

您可以使用spdiags生成矩阵:

n = numel(a);    
a_new = spdiags([repmat(flip(a).',1,n); repmat(a,n-1,1)],(1-n):0);