2015-10-13 104 views
4

我試圖創建一個矩陣,它是n x 5。該矩陣將由另一個包含整數的數組構成。創建包含來自另一個陣列的連續號碼的新矩陣

所有行都以數字減4開始,並以數組結束。我試圖找到一種不使用for-loop的有效方法。 爲了說明我給一個例子情況:

b=[6 8 9 11 13 16 17 ]; 
A=zeros(length(b),5); 

使用的代碼後,我想獲得:

A=[2:6; 
    4:8; 
    5:9; 
    9:13; 
    12:16; 
    13:17]; 

回答

5

使用bsxfun@plus@minus操作符b爲列向量和偏移行向量,其從-4 to 0針對@plus說明符和4 to 0針對@minus說明符作爲它的最後一個參數。因此,實現應該是這樣的 -

bsxfun(@plus,b(:),-4:0) 
bsxfun(@minus,b(:),4:-1:0) 

採樣運行 -

>> b 
b = 
    6  8  9 11 13 16 17 
>> bsxfun(@plus,b(:),-4:0) 
ans = 
    2  3  4  5  6 
    4  5  6  7  8 
    5  6  7  8  9 
    7  8  9 10 11 
    9 10 11 12 13 
    12 13 14 15 16 
    13 14 15 16 17 
>> bsxfun(@minus,b(:),4:-1:0) 
ans = 
    2  3  4  5  6 
    4  5  6  7  8 
    5  6  7  8  9 
    7  8  9 10 11 
    9 10 11 12 13 
    12 13 14 15 16 
    13 14 15 16 17