【问题标题】:Vectorize functions on regions of array Octave/ Matlab在数组 Octave/Matlab 的区域上向量化函数
【发布时间】:2013-05-07 23:55:40
【问题描述】:

我想对以下 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);

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

谢谢

【问题讨论】:

    标签: matlab octave vectorization


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 2018-06-24
      • 1970-01-01
      • 2012-10-15
      相关资源
      最近更新 更多