Как выбрать данные в диапазоне - PullRequest
0 голосов
/ 24 октября 2018

Предположим, у меня есть некоторые циклические данные [min> = 0, max <360], </p>

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.

1 Ответ

0 голосов
/ 24 октября 2018

В зависимости от того, что вы хотите, когда низкий> высокий, условия должны быть 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...