【问题标题】:Python Numpy, detect abnormals values in a list [duplicate]Python Numpy,检测列表中的异常值[重复]
【发布时间】:2017-09-03 03:47:21
【问题描述】:

在一个列表中,我想拒绝一些值,因为它们偏离中位数很多:0.4877、0.5113 和 1.5103

我做了以下代码,它似乎可以工作,但我想知道这是否是正确的方法?特别是 data_std = 0.30988 似乎很多。我应该使用平方根吗?

import numpy

def out_of_range(d, min, max):
    if d < min or d > max:
        return "    " #rejected
    return ""

data = list([0.1410,
            0.1437,
            0.1371,
            0.1318,
            0.4877,
            0.5113,
            1.5103,
            0.1388,
            0.1398,
            0.1384,
            0.1406,
            0.1383,
            0.1458,
            0.1410,
            0.1423,
            0.1372,
            0.1386,
            0.1343,
            0.1397,
            0.1413])

data_mean   = numpy.mean(data)
data_std    = numpy.std(data)
data_median = numpy.median(data)

min_range = data_median - data_std
max_range = data_median + data_std

print "Mean      : " + str(data_mean)
print "Median    : " + str(data_median)
print "std dev   : " + str(data_std)
print "min_range : " + str(min_range)
print "max_range : " + str(max_range)
print ""
print "---data---"
for d in data:
    print out_of_range(d, min_range, max_range) +str(d)

返回

Mean      : 0.24395
Median    : 0.1402
std dev   : 0.309883094892
min_range : -0.169683094892
max_range : 0.450083094892

---data---
0.141
0.1437
0.1371
0.1318
    0.4877
    0.5113
    1.5103
0.1388
0.1398
0.1384
0.1406
0.1383
0.1458
0.141
0.1423
0.1372
0.1386
0.1343
0.1397
0.1413

【问题讨论】:

  • @aryamccarthy 是的,谢谢我没找到,我应该删除这个吗?

标签: python numpy


【解决方案1】:

号码是正确的。

(sum( (i-np.mean(data))**2 for i in data )/len(data))**0.5
0.30988309489225124

np.std(data)
0.30988309489225124

【讨论】:

  • 确实,“似乎很多”我在谈论最小和最大范围的计算,而不是挑战 Numpy ^^。抱歉,不清楚
猜你喜欢
  • 2023-03-07
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 2013-02-09
  • 2019-07-24
相关资源
最近更新 更多