计算平均值而不被线性抛出

JD *_*cks 5 php algorithm average

我试图计算一个平均值而不被一小组远离数字(即1,2,1,2,3,4,50)抛弃,单个50将甩掉整个平均值.

如果我有一个这样的数字列表:

19,20,21,21,22,30,60,60

平均为31

中位数是30

模式为21和60(平均为40.5)

但是任何人都可以看到大多数是在19-22(5英寸,3英尺)的范围内,如果你得到的只是主要范围的平均值是20.6(与上面任何一个数字相比差别很大)

我在想你可以这样:

C +博士

c数字的计数在哪里,d是不同的值,r是范围.然后你可以将它应用于所有可能的范围,最高分是获得平均值的最佳范围.

例如,19,20,21,21,22将是5个数字,4个不同的值,范围是3(22 - 19).如果你把它插入我的方程式,你得到5 + 4-3 = 6

如果将其应用于整个数字列表,则为8 + 6-41 = -27

我认为这很好用,但我必须创建一个巨大的循环来测试所有可能的范围.在我的小例子中,有21个可能的范围:

19-19,19-20,19-21,19-22,19-30,19-60,20-20,20-21,20-22,20-30,20-60,21-21,21- 22,21-30,21-60,22-22,22-30,22-60,30-30,30-60,60-60

我想知道是否有更有效的方法来获得这样的平均值.

或者如果某人有更好的算法?

gro*_*gel 2

您可能会在这里利用标准差,它基本上衡量数据点的集中程度。您可以将离群值定义为与平均值相差超过 1 个标准差(或任何其他适合您的数字)的值,将它们丢弃,然后计算不包含它们的新平均值。