在python中有没有一种方法可以从数组中删除类似的(数字)元素

2024-04-26 09:57:26 发布

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

我有一个生成数组的函数:

[ 14  48  81 111 112 113 114 148 179 213 247 279 311 313 314 344 345 346]

对应于曲线穿过x轴的数据值。由于数据不完美,它会产生误报,其中我的输出数组中的元素彼此非常接近,例如[111 112 113 114]。我需要从这个数组中删除假阳性,但仍然保留假阳性显示位置周围的初始阳性。基本上我需要我的函数来产生和数组更像

[ 14  48  81 112 148 179 213 247 279 313 345]

不完美数据中的假阳性已经消除。你知道吗


Tags: 数据函数元素数组阳性曲线误报
3条回答

这可以吗

#arr is the array you want, num is the number difference between them

def check(arr, num):
    for r in arr:
        for c in arr:
            if abs(r-c) < num + 1:
                arr.remove(c)
    return arr
yourarray = [14,48  ,81 ,111 ,112 ,113 ,114, 148 ,            179 ,213 ,247 ,279 ,311, 313 ,314 ,344, 345, 346]
print(check(yourarray, 1))

以下是一种可能的方法:

arr = [14, 48, 81, 111, 112, 113, 114, 148, 179, 213, 247, 279, 311, 313, 314, 344, 345, 346]

def filter_arr(arr, offset):
    filtered_nums = set()
    for num in sorted(arr):
        # Check if there are any "similar" numbers already found
        if any(num+x in filtered_nums for x in range(-offset, offset+1)):
            continue
        else:
            filtered_nums.add(num)
    return list(sorted(filtered_nums))

然后,您可以使用您认为最有意义的任何偏移来应用过滤。你知道吗

filter_arr(arr, offset=5)  
Output:  [14, 48, 81, 111, 148, 179, 213, 247, 279, 311, 344]

我会这样做:

概念上: 假设数字的10是10的量,可以用给定的数字来拟合,例如111的10是11,247的10是24,250的10是25,依此类推。 对于我们的数据,如果给定10的数字已经存在,则丢弃它。你知道吗

代码:

data = [14,48,81,111,112,113,114,148,179,213,247,279,311,313,314,344,345,346]
cleaned = [i for inx,i in enumerate(data) if not i//10 in [j//10 for j in data[:inx]]]
print(cleaned) #[14, 48, 81, 111, 148, 179, 213, 247, 279, 311, 344]

请注意,10只是一个示例值,您可以用另一个值替换它—值越大意味着可能会删除更多的元素。请记住,此解决方案的特定特性是特定值对(例如10110111)将被视为不同的,并将保留在输出列表中,因此您需要检查在使用情况下这是否不是问题。你知道吗

相关问题 更多 >