gpt4 book ai didi

python - 检查列表中重复数组的快速方法

转载 作者:行者123 更新时间:2023-11-28 18:08:30 24 4
gpt4 key购买 nike

我有一个包含大约 48,000 个一维数组的列表(我们称之为 all_my_arrays)。我想知道这个列表中有多少重复数组,如果有的话。但是,我想排除空数组(因为我在列表中有多个空数组并且不希望将它们计入我的重复计数)。我在下面尝试了这段代码,但它花费的时间太长了:

import numpy as np
uniques=[]
for arr in all_my_arrays:
if not np.array_equal(np.array([]), arr):
if not any(np.array_equal(arr, unique_arr) for unique_arr in uniques):
uniques.append(arr)
print(len(uniques)) #number of non-duplicates

有没有更快的方法来完成这个?

最佳答案

您可以使用set 类型来获取列表中的唯一值。首先,您必须将数组转换为可哈希类型(这里的元组很好)。这是一个例子:

uniques = set(tuple(arr) for arr in all_my_arrays if arr.size > 0)

集合 uniques 将包含原始 all_my_arrays 列表中所有唯一的非空数组。 uniques 的内容是元组,但您可以使用列表理解将它们转换回数组。如果您只对唯一数组的数量感兴趣,那么您可以只调用 len(uniques) 而不必担心转换回数组。

这种方法的时间复杂度为 O(n + m),其中 n 是数组的数量,m 是每个数组的长度。然而,转换为元组会产生开销,但我相信这种方法应该比你目前使用的方法(具有时间复杂度 O(n^2))更快,尤其是对于如此大量的数组。

编辑:为了加快速度,您可以删除每个元素上的空检查,然后在最后处理它。这是它的样子:

uniques = set(tuple(arr) for arr in all_my_arrays)
num_unique = len(uniques) if () not in uniques else len(uniques) - 1

关于python - 检查列表中重复数组的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52194717/

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