我想构造一个接受输入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中做到这一点的聪明方法
答案 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