gpt4 book ai didi

python - 比较两个列表或 numpy 数组的更快方法是什么

转载 作者:行者123 更新时间:2023-12-01 00:42:50 24 4
gpt4 key购买 nike

我正在通过遍历文件夹进行一些图像处理。有近100万张图像,我想在处理之前检查文件全名是否之前处理过。

我将处理后的文件名保存在 numpy 数组中。我正在使用下面的代码获取完整的文件列表,并使用我的 numpy 列表检查最终列表是否之前已处理。

下面的代码花费的时间太长...

怎样才能让它更快。 ?


newFiles = []
duplicate = 0
old_np = np.load("FILEStest.npy") . ##//almost 200.000

start_time = time.time()

list_of_files = bc.getListOfFiles("/Users/xxx/Downloads/CS_tt_test/") ##// almost 1 million files. its fast . 60 sec.

elapsed_time = time.time() - start_time

##//Comparing here whether is already processed. This part very slow.

for old in range(len(list_of_files)):
file = list_of_files[old]
if not np.any(old_np[:, ] == file):
newFiles.append(file)
else:
duplicate += 1
# print("Seen before ", file)

print("duplicates : " , duplicate)

print(elapsed_time)

最佳答案

设置(list_of_files) - 设置(old_np)

看起来您正在查找 list_of_files 中不在 old_np 中的所有值。上面的设置操作给出了结果并且速度相当快。

集合的行为与列表不同。集合是无序的,只能包含唯一的元素。这些属性允许执行与列表不同的操作。此类操作包括并集和差集。有关集合的更多信息可以在 official documentation 中找到。

完整代码

简短而简单

old_np = np.load("FILEStest.npy") . ##//almost 200.000 
list_of_files = bc.getListOfFiles("/Users/xxx/Downloads/CS_tt_test/")

new_files = set(list_of_files) - set(old_np)

定时示例

考虑以下示例代码。我不知道您的数据,因此这只是一个虚拟示例。

%%timeit
import numpy as np

all_files = range(0, int(1e7)) # just a few more to be sure
old_files = np.random.randint(0, 1e7, size=int(1e5)) # random old "files"

new_files = set(all_files) - set(old_files)
len(new_files)

返回

770 ms ± 29.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

不太破旧吧?

关于python - 比较两个列表或 numpy 数组的更快方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57222199/

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