Skip to main content
 首页 » 编程设计

python之选择范围内的角度

2025年05月04日10zengkefu

我想检查 numpy 数组中的哪些角度在给定的 alpha +/- delta 范围内。 当范围超过 0 或 360 时会出现一些问题。

如果我忽略边界情况,我可以这样做:

import numpy as np 
def angleInRange(X,alpha,delta): 
    return  (alpha - delta <= X) & (X <= alpha + delta) 

如果我用 X = np.array([0, 5, 180, 355, 360]) 测试它是获取

>>> print(angleInRange(X,170,30)) 
[False False  True False False]     # Correct 
>>> print(angleInRange(X,10 ,30)) 
[ True  True False False False]     # 355 and 360 are not selected 
>>> print(angleInRange(X,350,30)) 
[False False False  True  True]     # 0 and 5 are not selected 

如果我想获得正确的结果,我需要做类似的事情

def angleInRange(X,alpha,delta): 
    test = (   ((alpha       - delta <= X) & (X <= alpha       + delta)) 
             | ((alpha + 360 - delta <= X) & (X <= 360                )) 
             | ((                  0 <= X) & (X <= alpha - 360 + delta)) 
           ) 
 
    return test 

屈服于:

>>> print(angleInRange(X,170,30)) 
[False False  True False False] 
>>> print(angleInRange(X,10 ,30)) 
[ True  True False True True ] 
>>> print(angleInRange(X,350,30)) 
[True True False  True  True] 

这是正确的,但是否有更 pythonic 和更简单的方法来实现这一点?模 (%) 运算符可以提供帮助吗?

请您参考如下方法:

在您的情况下,使用链式比较( a < X and X < b 变为 a < X < b )和逻辑运算符是合乎逻辑的,它短路( | 和 & 甚至测试左右操作数如果仅通过左操作数知道最终结果,请改用 or 和 and):

test =   ((alpha       - delta <= X <= alpha       + delta) 
         or (alpha + 360 - delta <= X <= 360                ) 
         or (                  0 <= X <= alpha - 360 + delta))