我正在尝试对此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
答案 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);
但是,较短的表达式需要较少的中间矩阵和较少的运算,因此会更快。