如何选择范围内的数据

时间:2018-10-24 12:32:54

标签: python numpy statistics

假设我有一些循环数据[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 = 24low = 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,则该函数将起作用。

1 个答案:

答案 0 :(得分:1)

根据需要,当从低到高时,条件应为angles>=lowangles<=high,而不是angles>=lowangles<=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)