循环矢量化

时间:2019-05-20 22:24:41

标签: matlab vectorization

我正在尝试对此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

1 个答案:

答案 0 :(得分:3)

对于两个具有不同符号的事物,这意味着它们的乘积为负:

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

与以下相同:

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

通过简单地将操作转换为按元素的操作,即可轻松实现矢量化:

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

可以用相同的方式对原始结构进行矢量化处理,其中&|&&||的元素方式对应的对象:

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

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