尖峰消除算法

Val*_*adu 3 c algorithm objective-c

我有一个范围从30到300的值数组。我想以某种方式得出一个加权平均值,如果我有5个值并且其中一个值比其余值大很多(峰值),则不会对平均值产生太大影响因为它会如果我只是做一个算术平均:例如:(n1+n2+n3+n4+n5)/5

有谁知道如何制作一个可以做到这一点的简单算法,或者在哪里看?

ieg*_*god 5

听起来好像您要丢弃超出指定参数范围的数据。您可以通过计算中位数/众数并在计算平均值时忽略此范围之外的值来实现。当然,您必须相应地调整除数,以解决丢弃值的数量。这个“可容忍的”范围最终应该由您决定,并且可能取决于您的特定应用程序需求。

另外,您可以尝试消除诸如超出总平均值范围的r%之类的方法。像这样(在javascript中):

function RangedAverage(arr, r)
{
    x = Average(arr);
    //now eliminate items r% out of range
    for(var i=0; i<arr.length; i++)
        if(arr[i] < (x/r) || arr[i]>(x*(1+r)))
            arr.splice(i,1);
    x = Average(arr); //compute new average
    return x;
}
Run Code Online (Sandbox Code Playgroud)