Я хотел бы проверить, какие углы в массиве numpy находятся в пределах заданной альфа +/- дельты.
Некоторые проблемы возникают, когда диапазон пересекает 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]
Это правильно, но есть ли более питонический и менее громоздкий способ добиться этого? Может ли оператор по модулю (%) помочь здесь?