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相同的输出?这可能是非常明显的,但我似乎没有在这里进一步.我很感激任何帮助!非常感谢提前.
您可以使用movsum而不是循环:
ref1 = movsum(vec(T+3:T+2*n+2),n+1,'Endpoints','discard');
Run Code Online (Sandbox Code Playgroud)