python判断列表是否有重复数据_关于数组:检查python列表/ numpy ndarray中是否存在重复项的最快方法...

这篇博客探讨了在Python中检查numpy数组是否存在重复项的最快方法,包括使用`np.unique`、集合操作以及Bloom过滤器。文章通过性能测试比较了不同方法的效率,并指出在预期重复率不同的情况下,应选择合适的方法。
摘要由CSDN通过智能技术生成

我想确定我的列表(实际上是一个numpy.ndarray)是否在最快的执行时间内包含重复项。请注意,我不在乎删除副本,我只是想知道是否有副本。

注意:如果这不是一个副本,我会非常惊讶,但我已经尽力了,找不到了。最近的是这个问题和这个问题,这两个问题都要求返回唯一列表。

你的意思是"快速"地写代码(并且,大概,在六个月后你读的时候很快地理解它),还是快速执行?

此外,如果可以接受误报,您可能需要使用Bloom过滤器(我非常确定有一些基于numpy的好实现)。即使不接受假阳性,也可能更快(当然也需要更少的内存),首先运行Bloom过滤器,然后使用集合或np.unique检查可能的唯一性。

我的问题是关于执行速度,但当然,不可理解的代码并不是任何人最好的朋友。布卢姆过滤器是一个非常有趣的方法!

为了更好地看待替代方案,np.unique做了一个sort,并寻找成对的差异。如果重复次数非常少,以至于短路方法以任何方式扫描阵列的大部分,那么这可能是最好的方法。

数组中的值类型是什么?也就是说,什么是arr.dtype?

@沃伦,我都没想过。我的数组包含30000个长度小于20的np.str。我想这可能会大大改变性能。

这是我想用的四种方法。

tl;dr:如果您期望很少(少于1/1000)个副本:

def contains_duplicates(X):

return len(np.unique(X)) != len(X)

如果您希望经常(超过1/1000)重复:

def contains_duplicates(X):

seen = set()

seen_add = seen.add

for x in X:

if (x in seen or seen_add(x)):

return True

return False

第一种方法是提前退出这个答案,它希望返回唯一的值,第二种方法是应用于这个答案的相同思想。

>>> import numpy as np

>>> X = np.random.normal(0,1,[10000])

>>> def terhor

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值