Matlab创建矢量化序列

jim*_*jim 5 matlab vectorization

我想构造一个接受输入n并给出向量的函数

[n n-1 n-2 ... n-n, n-1 n-2 ... n-n, ..., n-n]

//Example 
input :  n=3 
output : [3 2 1 0 2 1 0 1 0 0]
Run Code Online (Sandbox Code Playgroud)

我知道如何使用循环来做到这一点,但我正在寻找一种在MATLAB中做到这一点的聪明方法

mmu*_*oss 7

您可以使用repmat几次重复矩阵,然后通过选择仅三角形部分tril.像这样:

n=3;
x=repmat(n:-1:0,1,n+1);
result=x(tril(ones(n+1))>0)
Run Code Online (Sandbox Code Playgroud)

或者在一行中:

n=3;
getfield(repmat(n:-1:0,1,n+1),{reshape(tril(ones(n+1))>0,1,(n+1)^2)})
Run Code Online (Sandbox Code Playgroud)

此函数的结果是所需的输出:

result =

     3     2     1     0     2     1     0     1     0     0
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案,我想通过用以下结果替换最后一行仍然可以取出一步:`result = x(tril(true(n + 1))) (2认同)