gpt4 book ai didi

python - 如何从数字列表中删除高度差异化的元素

转载 作者:行者123 更新时间:2023-11-28 18:44:29 26 4
gpt4 key购买 nike

我有一些列表,其中每个列表包含相似的数字(公差:+/-10%)。但有时列表也包含噪音:与其他“正常”元素有很大差异的元素。

这里有一些例子:

a = [100, 102, 99, 225, 105]
b = [150, 142, 24, 153, 147, 315, 149]
c = [34, 33, 31, 80, 32, 30]

我想要的是一种自动消除这些噪音的简单方法。从第一个列表中,225 应该被删除。从第二个列表中,应该删除 24315。从最后一个列表中,80 应该被删除。目前,我的代码是这样的:

import math

def foo(numbers):
numbers_filtered = []
for i, n in enumerate(numbers):
n_upper = n + (n * 0.1)
n_lower = n - (n * 0.1)
similar = 0
for j, m in enumerate(numbers):
if i == j:
continue
if m >= n_lower and m <= n_upper:
similar += 1
if similar >= math.ceil(len(numbers) / 2.0):
numbers_filtered.append(n)

print('%s -> %s' % (numbers, numbers_filtered))

a = [100, 102, 99, 225, 105]
b = [150, 142, 24, 153, 147, 315, 149]
c = [34, 33, 31, 80, 32, 30]
foo(a)
foo(b)
foo(c)

但我对代码不满意,因为我期待更简单的代码。你能建议我更简单的方法来完成这项任务吗?

最佳答案

一种简单的方法是使用标准差:

avg = sum(numbers) / len(numbers)
diff = [ (i - avg) ** 2 for i in numbers]
stddev = math.sqrt(sum(diff) / len(numbers))

# filter out outliers
result = []
for n in numbers:
distance = abs(n - avg)
if distance < stddev * FACTOR:
result.append( n )

定义正确的 FACTOR 可能是一个挑战,因此不会丢失太多数字。您可以添加额外的外部循环来检查丢弃了多少数字并相应地更新 FACTOR。这将允许像“至少保留 50% 的数字”这样的逻辑。

关于python - 如何从数字列表中删除高度差异化的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22114300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com