如何编写循环以丢弃与平均值相差太远的值?

时间:2019-04-24 10:23:46

标签: python loops intervals

在我的代码中,我输入了一些数据点,并输出了数据点之间的间隔数组:例如[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 个答案:

答案 0 :(得分:1)

尝试一下:

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)]

答案 1 :(得分:0)

这是其他信息:在我看来,您可能正在寻找异常值检查。如果是这样的话:您可能需要某种测试MEDIAN值偏差的方法,因为均值会受到离群值的太大影响:我可以推荐1 Joe Kington的答案。

答案 2 :(得分:-2)

Python中没有百分比运算符,您需要定义一个从averageinterval获取百分比的方法。

示例:

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