在阵列Octave / Matlab的区域上矢量化函数

时间:2013-05-06 14:34:34

标签: matlab octave vectorization

我想对以下Octave代码进行矢量化:

A = 1:100;
B = [20 40 60];
C = zeros(3,11);

for i = B,
    C(i,:) = A( (B(i) - 10) : B(i) );
end

从较长的数组中提取从特定索引开始的子数组。

我试过了:

C = A(B - 10,B);

但这只返回第一个子数组。

由于

1 个答案:

答案 0 :(得分:1)

怎么样

>> C = A( bsxfun( @plus, -10:0, B' ) );

C =

    10    11    12    13    14    15    16    17    18    19    20
    30    31    32    33    34    35    36    37    38    39    40
    50    51    52    53    54    55    56    57    58    59    60

如果您没有八度音阶bsxfun,可以使用repmat

执行此操作
C = A( repmat( -10:0, [3 1] ) + repmat( B', [1 11] ) ); 

PS,
最好not to use i as a variable in Matlab