使这个matlab片段在没有循环的情况下运行

时间:2013-04-26 16:52:29

标签: matlab vectorization

我想要一个代码,下面的代码在时间上更有效。最好没有循环。

参数:

t % time values vector
t_index = c % one of the possible indices ranging from 1:length(t).
A % a MXN array where M = length(t)
B % a 1XN array

代码:

m = 1;
for k = t_index:length(t)
        A(k,1:(end-m+1)) = A(k,1:(end-m+1)) + B(m:end); 
        m = m + 1;
end 

非常感谢。

1 个答案:

答案 0 :(得分:2)

我从B构建了一个大小为NxM的矩阵(称之为B2),在正确的位置使用零,根据条件使用三角形,然后您需要做的就是A+B2

类似的东西:

N=size(A,2);
B2=zeros(size(A));
k=c:length(t);
B2(k(1):k(N),:)=hankel(B)
ans=A+B2;

请注意,它是“矢量化”这一事实并不意味着它现在更快。 Matlab的JIT使循环具有可比性,有时比内置的矢量化选项更快。