2017-04-26 52 views
1

我想創建長度Ns(Ns+1)的數組,我需要第一Ns元素是0,未來Ns元素是1...,最後NsNs創建具有相同的價值觀MATLAB數組幾個部分

我知道有很多方法可以做到這一點for-loops,我想避免這個特定的任務。我正在尋找一種方法來使用matlab函數和向量化的概念來做到這一點。

例如,我有一個類似的數組,我想與0, 1, 2, ..., Ns, 0, 1, 2, ..., Ns, 0, 1, 2, ...來填充,我做到了這一點與

my_array = repmat(0:Ns, 1, Ns+1); 

是否有采取以達到我的目的了類似的做法?

一兩件事,我想我能做的只是創造像

0 0 0 ... 0 
1 1 1 ... 1 
... ... ... 
Ns Ns .. Ns 

然後連接線的矩陣;我會知道如何創建矩陣,但不知道如何將行連接成數組。

還有其他方法嗎?命令的建議也是可以接受的!

謝謝。

回答

6

可能repmat做到這一點,但它的簡單與repelem

my_array = repelem(0:Ns, Ns); 
3

reshape命令可能是相關

>> Ns = 3; 
>> a = repmat(0:Ns, Ns, 1) 
a = 
0  1  2  3 
0  1  2  3 
0  1  2  3 

>> b = reshape(a, 1, []) 
b = 
0  0  0  1  1  1  2  2  2  3  3  3 
4

這裏的另一種方式:

result = ceil(-1+1/Ns:1/Ns:Ns); 

或者,對於一般的數組:

data = [4 1 2 5]; 
Ns = 3; 
result = data(ceil(1/Ns:1/Ns:numel(data))); 

其給出

result = 
    4  4  4  1  1  1  2  2  2  5  5  5 

此即使不ceil來完成,利用implicit rounding in colon indices未記錄;比實際更有趣):

data = [4 1 2 5]; 
Ns = 3; 
result = data(.5:1/Ns:numel(data)+.5-1/Ns);