求平均值和删除差异很大的数字

2024-05-16 23:38:32 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,假设我有一个列表,包括: 2231, 2240, 2236, 2238, 7

现在这些数字来自一个传感器,一个高度传感器,所以有些数字可能有问题,比如7。你知道吗

如果我想得到一个合理的平均值,我会过滤掉7,作为一个算法我该怎么做呢?请在Python、C++或Frink(我打算使用的)中显示可理解的代码。

我想过使用标准差,但我不知道如何实现它。 很抱歉,我找不到任何我尝试过的代码,我在它不起作用后删除了它。你知道吗


Tags: 代码算法列表高度数字传感器平均值我会
2条回答

使用标准差:

#!/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”,可以跳过大部分代码。你知道吗

我假设你可以定义两个读数之间可接受的差值。如果你的值可以根据读数从最小值/最大值跳出来,那么平均值实际上对你没有帮助。你知道吗

下面是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

相关问题 更多 >