矢量化和矢量索引

ban*_*nan 4 indexing matlab vectorization

我目前需要加速我的代码,因此想要使用矢量化而不是循环.以下代码是在我的计算过程中被调用的代码的(非常)简化版本:

    T=10; n=5; w0 = 25000; w1 = 23000; b0 = 15000; 
    vec = zeros(1,T+2*n+1); vec(1:n+1) = w0; vec(n+2:n+T+1) = b0; vec(n+T+2:T+2*n+2) = w1;
    ref0=zeros(1,n);
    for i = 1:n
        ref0(i) = sum(vec(T+i+2:n+T+i+2));
    end
Run Code Online (Sandbox Code Playgroud)

我试图使用矢量化,但不幸的是它似乎不起作用,因为我的矢量的第一个条目i被用作矢量索引过程中的输入:

i = 1:n;
ref1 = sum(vec(T+i+2:n+T+i+2));
Run Code Online (Sandbox Code Playgroud)

输出如下:

ref0 =

  106000      114000      122000      130000      138000

ref1 =

  106000
Run Code Online (Sandbox Code Playgroud)

有没有办法实现ref1使用向量化提供与ref0相同的输出?这可能是非常明显的,但我似乎没有在这里进一步.我很感激任何帮助!非常感谢提前.

EBH*_*EBH 5

您可以使用movsum而不是循环:

ref1 = movsum(vec(T+3:T+2*n+2),n+1,'Endpoints','discard');
Run Code Online (Sandbox Code Playgroud)