【问题标题】:Range overlap in a 360 sector in PythonPython中360扇区的范围重叠
【发布时间】:2019-06-25 21:00:12
【问题描述】:

一个 360 弧度的圆由 30 度扇区分隔。有传感器以有限的角度发送波。样本数据如下。就是说sensor 1发243到319度的波,sensor2可以发243到139和241到305两个角度的波。

sensordata = pd.DataFrame({'sensor':['sensor1','sensor2','sensor2'], 'lower_bound':[243,63,241],'upper_bound':[319,139,305]})
    sensor  lower_bound  upper_bound
0  sensor1          243          319
1  sensor2           63          139
2  sensor2          241          305
.......

我想要的是在每个扇区中检测哪个传感器可以发送波,即传感器的波与该扇区相交。比如0-30、30-60扇区没有sensor,60-90扇区应该sensor2为真,以此类推。

sector 0, none
sector 30, none
sector 60, sensor2
sector 90, sensor2
......
sector 210, none
sector 240, sensor1 and sensor2,
......

我试过下面的代码。它总是错过第一个正确的扇区,例如,在扇区 60-90 中,sensor2 应该为 True,但是下面的代码没有给出该扇区的任何信息。有什么建议可以使它正确吗?谢谢。

        for sector in np.arange(0, 360, 30):
            affected_sensor = sensordata[sensordata.lower_bound <= sector]
            affected_sensor = affected_sensor[affected_sensor.upper_bound >= sector]
            print(sector, affected_sensor)

【问题讨论】:

    标签: python geometry range overlap


    【解决方案1】:

    你做的太难了。通过直接计算找到作为扇区数的下界和上界:

    sec_lower = sector_data.lower_bound // 30
    sec_upper = sector_data.upper_bound // 30
    sector_coverage = list(range(sec_lower, sec_upper+1))
    

    这会为您提供当前使用的传感器所覆盖的扇区列表。这很容易在您喜欢的组织中积累。如果您有任何超过 360 度的传感器,请根据您的数据表示处理该特殊情况。你没有提供那个符号,所以我无法编写解决方案。

    【讨论】:

    • 感谢您的回答。运行最后一行时出现错误“TypeError:'Series'对象不能解释为整数”
    • 啊,我明白了:你的代码使它成为一个向量。在这种情况下,您需要以一种或另一种方式调整维度。我的主要观点是// 30 部分可以简化您的流程。
    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    相关资源
    最近更新 更多