循环向量化

Vectorization for loop

我正在尝试矢量化这个 for 循环。有什么想法吗?

D = 1x8851;

for k = 1:length(D)-1

    P(k) = ((D(k)<=0)&&(D(k+1)>=0))||((D(k)>=0)&&(D(k+1))<0);

 end

对于符号不同的两个事物,表示它们的乘积是负数:

P(k) = ((D(k)<=0)&&(D(k+1)>=0))||((D(k)>=0)&&(D(k+1))<0);

等同于:

P(k) = ( D(k) * D(k+1) ) <= 0;

通过简单地将操作转换为 element-wise 操作,这很容易向量化:

P = ( D(1:end-1) .* D(2:end) ) <= 0;

原始构造可以用相同的方式向量化,&|&&|| 的 element-wise 对应物:

P = ((D(1:end-1)<=0)&(D(2:end)>=0))|((D(1:end-1)>=0)&(D(2:end))<0);

但是,较短的表达式需要较少的中间矩阵和较少的操作,因此会更快。