所以,假设我有一个列表,其中包括:
2231, 2240, 2236, 2238, 7
现在这些数字来自一个传感器,一个高度传感器,所以有些数字可能是错误的,比如7
.
如果我想得到一个合理的平均值,我会过滤掉7
,作为算法我将如何做到这一点?请用 Python、C++ 甚至 Frink 显示可理解的代码(这是我打算使用的。)
我想过使用标准偏差,但我不知道如何实现它。对不起,我找不到任何我尝试过的代码,我在它不起作用后删除了它。
使用标准偏差:
#!/usr/local/bin/python2.7
import math
lista = [2231, 2240, 2236, 2238, 7]
newlist = []
mean = 0
newmean = 0
variance = 0
for i in lista:
mean += i
mean = mean/float(len(lista))
for i in lista:
variance += (i*i)
variance = variance/float(len(lista))
variance = math.sqrt(variance)
minval = variance - mean
maxval = variance + mean
for i in lista:
if i >= minval and i <= maxval:
newlist.append(i)
print newlist
for i in newlist:
newmean += i
newmean = newmean/float(len(newlist))
print newmean
如果您希望手动输入“minval”和“maxval”,可以跳过大部分代码。
我假设您可以在两个读数之间定义 ACCEPTABLE_DIFFERENCE。如果您的值可以根据读数从最小值/最大值跳出,那么平均值实际上不会帮助您。
这是说明这一点的python示例代码:
#!/usr/local/bin/python2.7
ACCEPTABLE_DIFF = 100
arr = [2231, 2240, 2236, 2238, 7]
for index in range(1,len(arr)):
if (abs(arr[index] - arr[index-1]) > ACCEPTABLE_DIFF):
del arr[index]
print arr
另一种方法是使用差异百分比:
#!/usr/local/bin/python2.7
ACCEPTABLE_DIFF_PERC = 5
arr = [2231, 2240, 2236, 2238, 7]
for index in range(1,len(arr)):
if (abs(arr[index] - arr[index-1]) > (arr[index-1]*ACCEPTABLE_DIFF_PERC/100)):
del arr[index]
print arr