2015-10-13 43 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