Matlab创建矢量化序列

时间:2014-02-06 12:54:03

标签: 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]

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

2 个答案:

答案 0 :(得分:7)

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

n=3;
x=repmat(n:-1:0,1,n+1);
result=x(tril(ones(n+1))>0)

或者在一行中:

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

此功能的结果是所需的输出:

result =

     3     2     1     0     2     1     0     1     0     0

答案 1 :(得分:4)

由于你没有得到任何答案,这是一种方法:

N = 3;
x = repmat(N:-1:0,1,N+1)-cumsum(repmat([1 zeros(1,N)],1,N+1))+1
x = x(x>=0)
x =
    3   2   1   0   2   1   0   1   0   0