【问题标题】:Truncated mean javascript截断均值 javascript
【发布时间】:2013-12-10 17:57:55
【问题描述】:

我的代码如下所示:

$(function () {
    var a = 0,
        timeCff = 0, //Firefox
        timeSff = 0,
        $.get('test1.csv').done(function (data) {
            var i,
            lines = data.split(/\r\n|\n/),
                line = lines[0].split(','),
                oS = line.indexOf('oS'),
                browName = line.indexOf('browName'),
                browVer = line.indexOf('browVer'),
                timeCanvas = line.indexOf('timeCanvas'),
                timeSvg = line.indexOf('timeSvg');
            for (i = 1; i < lines.length; i++) {
                line = lines[i].split(',');
                if (line[browName] === 'Firefox') {
                    a++;
                    timeCff += parseFloat(line[timeCanvas], 10);
                    timeSff += parseFloat(line[timeSvg], 10);
                }
            }
            $('#osInfo1').html("Twoja średnia  to: " + timeC / a);
            $('#osInfo2').html("Twój sytem operacyjny to: " + timeS / a);
        });
});

正如我们所见,我计算的是算术平均值。但我想计算截断的平均值以获得更好的结果。我用谷歌搜索了一些帮助,但找不到任何解决方案。我想我需要使用一些数组,但我不知道如何。

有没有人知道如何做或一些有用的信息?也许有一些好的库?

【问题讨论】:

  • 按面值计算..使用parseInt() 而不是parseFloat ?

标签: javascript jquery mean


【解决方案1】:

对于截断意味着您将丢弃高样本和低样本,您将为 timeCanvas 和一次 timeSvg 做一次

您可以使用自定义函数对行进行排序

function sortByTimeCanvas(a,b)(
  return a[timeCanvas]- b[timeCanvas]
)

然后用slice删除最高和最低的条目,然后求平均值。

【讨论】:

    【解决方案2】:

    这需要 2 个值:

    (1) values(数字数组):一个数字数组,从中计算修剪后的平均值

    (2) trimPercent(number): 一个百分比开始你要修剪的数字的百分比

    例如:

    trimmedAverage([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 20) 
    

    将从数组中删除20%的数字,即最高和最低

    values 数组不需要排序(因为函数内部会这样做)

    这是一个带有代码的sn-p代码:

    const trimmedAvg = (values, trimPercent) => {
      const sortedValues = values.sort()
      const trimCount = Math.floor(sortedValues.length * ((trimPercent / 2) * 0.01))
      const trimmedValues = sortedValues.slice(trimCount, sortedValues.length - trimCount)
      if (!trimmedValues.length) return null
      const sum = trimmedValues.reduce((acc, value) => acc + value, 0)
      return sum / trimmedValues.length
    }
    
    const arr = [100, 101, 102, 500, 103, 104, 105, 106, 1, 107, 108, 109, 110]
    
    console.log(trimmedAvg(arr, 20))

    【讨论】:

      猜你喜欢
      • 2018-09-07
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 2021-11-21
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      相关资源
      最近更新 更多