【发布时间】:2016-02-22 12:32:09
【问题描述】:
我正在处理来自位置传感器的数据,该传感器以角坐标(俯仰、滚动和偏航)报告。传感器读数使得最大读数为 180 度。越过这一点,读数就会跳到负数。例如,一系列轻微波动的读数可能类似于:
178.8
178.9
-178.8
-178.0
-179.0
180.0
179.0
我目前通过在循环中顺序检查所有值来处理这个问题。我得到两个连续读数之间的增量并保持运行总计以获得我当前的角位置。如果我从第三象限 (90
Yaw = inData['Yaw']
cum_sum = Yaw[0]
for i in range(1, Yaw)):
x_prev = Yaw[i-1]
x = Yaw[i]
if 90 <= x_prev and x_prev <= 180 and -180 <= x and x <= -90:
x = x + 360
elif -180 <= x_prev and x_prev <= -90 and 90 <= x and x <= 180:
x = x - 360
else:
pass
delta = x - x_prev
cum_sum += delta
这里,inData 是一个数据框,其中包含来自多个轴的角度位置,“Yaw”是该数据框中的一个系列。
如果我可以对角度值进行一致的校正,我可以生成一系列增量并进行累积求和以获得位置。但是,将 360 添加到所有读数或将角度作为模 360 只会将翻转点从 +/-180 之间的交叉点移动到 0 和 360 之间的交叉点。
鉴于我已经在 DataFrame/Series 中获得了这些读数,我想知道是否有更 Pythonic(更快)的方法来做到这一点。
【问题讨论】:
-
为什么不对小于零的值加360度?
-
类似:
inData.Yaw[inData.Yaw<0.0] += 360. -
请注意,这也有效并且更具可读性:
-180 <= x <= -90。鉴于 -180 是最小读数,您可以简单地使用x <= -90。但无论如何我都不会在循环中进行此计算。看看下面我的矢量化解决方案。 -
将 360 添加到负数只会将翻转从第 3 和第 4 象限移动到第 1 和第 4 象限。想想在 1 度,然后在负方向移动 2 度。如果将 360 添加到第二个值,则不是从 1 度变为 -1 度,而是变为 -359 度。
-
是的,复合条件句更具可读性。我猜,这只是我 C 天的遗留物。感谢您的建议。