我想检查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]
这是正确的,但是有没有一种更具霸道性、更不麻烦的方法来实现这一点呢?模(%)运算符在这里有帮助吗?你知道吗
在您的例子中,使用链式比较(
a < X and X < b
变成a < X < b
)和逻辑运算符是合乎逻辑的,这两个运算符短路(|
和&
测试左操作数和右操作数,即使最后的结果只有左操作数知道,也要使用or
和and
):This post或this other one可能会帮助你。你知道吗
基本上这样你就可以利用模和角的循环性质:
相关问题 更多 >
编程相关推荐