一堆数里面怎么去除一些严重偏离平均值的数,从而使平均数更精确?

求一组数的平均数,假设大部分数都在30-50之间,有几个数是10,88,90这样的无效数字,怎么过滤?
给出算法思想或者参考即可。

补充:我想要的是筛选去除无效数字的方法,题目里面的数字只是我举的例子,有可能有效范围是50-60。有没有根据大数中心定律修改的筛选办法?

更新:这类问题有个统称叫离群值,可以参考采纳的答案,也可以去搜索离群值的解决方案。

阅读 5.8k
2 个回答

参考这个https://blog.csdn.net/yuxeaot...,不知对不对

function filterOutliers(someArray) {  

    // Copy the values, rather than operating on references to existing values
    var values = someArray.concat();

    // Then sort
    values.sort( function(a, b) {
            return a - b;
         });

    /* Then find a generous IQR. This is generous because if (values.length / 4) 
     * is not an int, then really you should average the two elements on either 
     * side to find q1.
     */     
    var q1 = values[Math.floor((values.length / 4))];
    // Likewise for q3. 
    var q3 = values[Math.ceil((values.length * (3 / 4)))];
    var iqr = q3 - q1;

    // Then find min and max values
    var maxValue = q3 + iqr*1.5;
    var minValue = q1 - iqr*1.5;

    // Then filter anything beyond or beneath these values.
    var filteredValues = values.filter(function(x) {
        return (x <= maxValue) && (x >= minValue);
    });

    // Then return
    return filteredValues;
}

遍历,记录有效数字的和和个数即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏