Как я могу написать цикл для отбрасывания значений, которые слишком далеко от среднего значения? - PullRequest
0 голосов
/ 24 апреля 2019

В моем коде я ввожу несколько точек данных, и он выводит массив интервалов между точками данных: например, [92 97 97 99 99 99 97 97 98 97 99 98 95]

Если есть значение, которое на 20% меньше или больше среднегоиз интервалов, я хочу напечатать «Интервалы нерегулярные».Если нет значения, которое на 20% меньше или больше среднего значения интервалов, я хочу напечатать «интервалы не являются нерегулярными».

Я вычисляю среднее значение таким образом:

averageinterval = np.mean(intervals)

Затем я попытался написать цикл for:

for interval in intervals:
    if interval is 20% > averageinterval:
        print('intervals are irregular')

Это дает синтаксическую ошибку.Как я могу правильно написать этот цикл?

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

Попробуйте это:

def check_regularity(intervals):
    average = intervals.mean()
    regular = all(intervals < average * 1.2) and all(intervals > average * 0.8)
    print(f'The intervals are {"not " * regular}irregular.')

check_regularity(np.array([92, 97, 97, 99, 99, 99, 97, 97, 98, 97, 99, 98, 95]))
check_regularity(np.array([92, 97, 37, 99, 99, 99, 97, 97, 98, 97, 99, 98, 95]))

Вывод:

The intervals are not irregular.
The intervals are irregular.

Если вы просто хотите извлечь значения, которые находятся в этом диапазоне, то вы должны сделать это:

average = intervals.mean()
regular_intervals = intervals[(intervals < average * 1.2) & (intervals > average * 0.8)]
0 голосов
/ 24 апреля 2019

Это дополнительная информация: мне кажется, вы можете искать чеки на выбросы. Если это так: вы, вероятно, хотите что-то, что проверяет отклонение значения MEDIAN, потому что выбросы слишком сильно повлияют на среднее значение: я могу порекомендовать 1 ответ Джо Кингтона.

0 голосов
/ 24 апреля 2019

В Python нет такого понятия, как оператор процента, вам нужно определить метод, который берет процент от среднего интервала.

Пример:

def percentage(part, whole):
  return float(part)/ float(whole) * 100
...