我想構造接受輸入的n個的函數,並給出了矢量Matlab的創建矢量序列
[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
我想構造接受輸入的n個的函數,並給出了矢量Matlab的創建矢量序列
[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
您可以使用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
既然你沒有得到任何答案,這裏有一個方式做到這一點:
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
或者其他:'x = mod((N + 1)^ 2-1:-1:0,4) - ceil((1:((N + 1)^ 2))/(N + 1))+ 1'在一個非常相似的脈絡 – Dan
也許是一個品味的問題,但我會去中間這樣的事情: 'repmat(N:-1:0,N + 1,1)' - repmat(1:N + 1,N + 1,1)+ 1' –
我不明白序列如何去fr在n-n ... n-n到底 – Wajahat
@Wajahat我已經加了一些逗號,希望澄清一下。 –