假设我有一些循环数据 [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 angleshigh = 24,low = 354但下一部分是错误的angles = angles[angles>=low] # this is wrongangles = angles[angles<=high] # this is wrongremove_outliers(data, 9, 15) # gives empty array如果平均值高于15或低于345,该函数将起作用extend = 15。
1 回答

米脂
TA贡献1836条经验 获得超3个赞
根据您的需要,当低 > 高时,条件应该是angles>=lowOR angles<=high,而不是angles>=lowAND 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)
添加回答
举报
0/150
提交
取消