科学实验中剔除坏值的方法--肖维勒准则法

def Chauvenet(v):
    c = {5:1.65, 6:1.73, 7:1.8, 8:1.86, 9:1.92, 10:1.96, 11:2, 12:2.03}
    n = len(v)
    ave = getAve(v)
    stdDev = getStdDev(v)
    if len(v) < 5:
        print("数据少于5个,请检查")
    else:
        Xmin = ave - (c[n]*stdDev)
        Xmax = ave + (c[n]*stdDev)

    nv = []
    bv = []
    for i in range(n):
        if Xmin < v[i] < Xmax:
            nv.append(v[i])
        else:
            bv.append(v[i])

    if len(bv) == 0:
        print(str(v))
        print("该数据没有坏值")
        print()
        return nv
    else:
        print(str(v))
        print("该数据有坏值,分别是:")
        for i in range(len(bv)):
            print(bv)
        print()
    return Chauvenet(nv)

下面是最简单的实现方法。

def Chauvenet(v):
    c = {5:1.65, 6:1.73, 7:1.8, 8:1.86, 9:1.92, 10:1.96, 11:2, 12:2.03}
    if len(v) < 5:
        return []

    Xmin = getAve(v) - (c[len(v)]*getStdDev(v))
    Xmax = getAve(v) + (c[len(v)]*getStdDev(v))

    nv = [i for i in v if Xmin < i <Xmax]
    bv = [i for i in v if Xmin > i or i > Xmax]
    if bv == []:
        return nv

    return nv+Chauvenet(nv)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值