- 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 在大部分情况下同号,负数的情况居多。
|