假设我有一些循环数据[min> = 0,max <360],
data = np.array([355.9, 2.47 , 30.52, 5.33, 40.22, 340.22])
这些数据的循环平均值为9
我要选择均值+- 15
度附近的数据。
因此,所选数据将为new_data = [355.9, 2.47 , 5.33]
。所选数据在[low=9-15, high=9+15] = [354, 24]
我尝试过的是
def remove_outliers(angles, mean, extend):
high = (mean + extend) - 360 if (mean + extend)>360 else (mean + extend)
low = (mean - extend) + 360 if (mean - extend)<0 else (mean - extend)
angles = angles[angles>=low]
angles = angles[angles<=high]
return angles
high = 24
和low = 354
,但下一部分是错误的
angles = angles[angles>=low] # this is wrong
angles = angles[angles<=high] # this is wrong
remove_outliers(data, 9, 15) # gives empty array
如果平均值15
高于345
或低于extend = 15
,则该函数将起作用。
答案 0 :(得分:1)
根据需要,当从低到高时,条件应为angles>=low
或angles<=high
,而不是angles>=low
和angles<=high
。您还可以使用np.mod
函数来获取高值和低值。
我会写:
import numpy as np
def remove_outliers(angles, mean, extend):
high = np.mod(mean+extend,360)
low = np.mod(mean-extend,360)
if high < low:
return angles[(angles<=high) | (angles>=low)]
else:
return angles[(angles<=high) & (angles>=low)]
data = np.array([355.9, 2.47 , 30.52, 5.33, 40.22, 340.22])
correct_angles = remove_outliers(data, 9, 15)