0

我想矢量化以下 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);

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

谢谢

4

1 回答 1

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,
最好不要i在 Matlab 中用作变量

于 2013-05-06T15:15:45.183 回答