我想检查 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))
