Pv = 0; Nv = 0;
v1 = l(li);
v2 = l(li+1);
if((v1>0) && (v2>0))
Pv = Pv + 1;
elseif((v1<0) && (v2<0))
Nv = Nv +1;
elseif((v1>0) && (v2<0))
r = v1/(v1-v2);
Pv = Pv + r;
Nv = Nv + 1 - r;
elseif((v1<0) && (v2>0))
r = v2/(v2-v1);
Pv = Pv + r;
Nv = Nv + 1 - r;
end
这是一段MATLAB代码,目的是计算v1到v2这段数轴上,正数区间与负数区间的长度之比,然后累加到两个数据中。假设 v1 v2 都是正数,显然该段数轴全是正数,则只对 Pv 累加即可,全是负数则只对 NV 累加,再不然则分情况处理。
但是一共要用 4 个if,12次布尔运算,总是感觉写在CUDA里面太浪费了,感觉上是有更好的写法,但是想不出来。数学渣渣,求各位帮助提供个计算方案。
PS: v1 v2 在大部分情况下同号,负数的情况居多。