2

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

论据:

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 

非常感谢。

4

1 回答 1

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 使 for 循环具有可比性,有时甚至比内置矢量化选项更快。

于 2013-04-26T22:41:43.287 回答