【发布时间】:2013-08-14 13:23:11
【问题描述】:
所以,假设我有一个列表,其中包括:
2231, 2240, 2236, 2238, 7
现在这些数字来自一个传感器,一个高度传感器,所以有些数字可能是错误的,比如7。
如果我想得到一个合理的平均值,我会过滤掉7,作为算法我会怎么做?请在 Python、C++ 甚至 Frink 中展示可理解的代码(我打算使用它。)
我想过使用标准差,但我不知道如何实现它。 对不起,我找不到任何我尝试过的代码,我在它不起作用后将其删除。
【问题讨论】:
-
哦,是的,很抱歉。我试过将每个数字减半并将其乘以 2,然后用它做一些疯狂的事情,但它不适用于低数字。我想为每个十万个数字制作 if,但这似乎不切实际。我在纸上做了一些滑雪,它们看起来不错,但不起作用。
-
我想到的第一个想法是设置一个容差值,比如 1000。然后删除小于
mean-tolerance或大于mean+tolerance的数字 -
是的,正如 Fallen 所说,容差是个好主意,我们正在做某种相同的项目,我们有 5% 的容差率,所以如果下一个值不接近,它将被视为错误,但是您可以使用此公差百分比来找到最适合您的方法
-
关键规则是如何在数学上确定应排除的点。可能是与局部平均值的距离阈值。有了这个规则,您可以将它作为谓词提供给 std::remove_if。可以使用最小二乘法来确定趋势。
-
你也可以考虑使用中位数,因为它不受这些极端值的影响
标签: c++ python algorithm filter