gpt4 book ai didi

python - Numpy:数组的重复掩码(如果我们之前见过该值,则返回 True,否则返回 False)

转载 作者:行者123 更新时间:2023-12-05 03:49:28 25 4
gpt4 key购买 nike

我正在寻找一个向量化函数,它返回一个掩码,如果数组中的值之前已经看到,则返回值为 True,否则返回 False。

我正在寻找最快的解决方案,因为速度非常重要。

例如,这是我希望看到的:

array = [1, 2, 1, 2, 3]
mask = [False, False, True, True, False]

所以 is_duplicate = array[mask] 应该返回 [1, 2]

有没有一种快速、矢量化的方法来做到这一点?谢谢!

最佳答案

方法#1:排序

def mask_firstocc(a):
sidx = a.argsort(kind='stable')
b = a[sidx]
out = np.r_[False,b[:-1] == b[1:]][sidx.argsort()]
return out

我们可以使用array-assignment 来提高性能。进一步-

def mask_firstocc_v2(a):
sidx = a.argsort(kind='stable')
b = a[sidx]
mask = np.r_[False,b[:-1] == b[1:]]
out = np.empty(len(a), dtype=bool)
out[sidx] = mask
return out

sample 运行-

In [166]: a
Out[166]: array([2, 1, 1, 0, 0, 4, 0, 3])

In [167]: mask_firstocc(a)
Out[167]: array([False, False, True, False, True, False, True, False])

方法 #2: 使用 np.unique(..., return_index)

我们可以利用 np.unique 及其 return_index 它似乎返回每个唯一元素的第一次出现,因此一个简单的数组分配然后索引工作 -

def mask_firstocc_with_unique(a):
mask = np.ones(len(a), dtype=bool)
mask[np.unique(a, return_index=True)[1]] = False
return mask

关于python - Numpy:数组的重复掩码(如果我们之前见过该值,则返回 True,否则返回 False),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63960980/

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