gpt4 book ai didi

python - 比较字典中所有值的最有效方法?

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:05 27 4
gpt4 key购买 nike

我有一本字典,是我通过阅读大量图像文件创建的。它看起来像这样:

files = { 'file1.png': [data...], 'file2.png': [data...], ... 'file1000': [data...]}

我正在尝试处理这些图像以查看它们之间的相似程度。问题是,有 1000 多个文件的数据,这需要永远。我确信我有 20 个不同的地方可以优化,但我正在尝试一次一个地完成它,以了解如何更好地优化它。

我的原始方法针对所有其余文件测试了 file1。然后我针对所有文件测试了 file2。但我仍然针对 file1 对其进行了测试。所以,当我在上面的例子中到达 file1000 时,我什至不需要在那个时候测试任何东西,因为它已经被测试了 999 次。

这是我尝试过的:

answers = {}
for x in files:
for y in files:
if y not in answers or x not in answers[y]:
if(compare(files[x],files[y]) < 0.01):
answers.setdefault(x, []).append(y)

这不起作用,因为我现在得到错误的输出。比较函数就是这样:

rms = math.sqrt(functools.reduce(operator.add,map(lambda a,b: (a-b)**2, h1[0], h2[0]))/len(h1[0]))
return rms

我只是不想把那个庞大的等式放到 if 语句中。

有没有人有比较文件字典的每个数据段而不重叠比较的好方法?

编辑:

在尝试了 ShadowRanger 的回答后,我意识到我可能没有完全理解我需要什么。我原来的答案字典是这样的:

{ 'file1.png': ['file1.png', 'file23.png', 'file333.png'],
'file2.png': ['file2.png'],
'file3.png': ['file3.png', 'file4.png', 'file5.png'],
'file4.png': ['file3.png', 'file4.png', 'file5.png'],
...}

现在我将结果存储在这样的文件中:

file1.png file23.png file33.png
file2.png
file3.png file4.png file5.png
file6.png
...

我认为通过使用组合并只测试单个文件一次,我可以节省大量重新测试文件的时间,而不必浪费时间来删除重复的答案。但据我所知,这些组合实际上降低了我找到匹配项的能力,我不确定为什么。

最佳答案

可以避免多余的比较with itertools.combinations to get order-insensitive unique pairs .只需导入 itertools 并替换您的双重嵌套循环:

for x in files:
for y in files:

使用获取组合的单个循环:

for x, y in itertools.combinations(files, 2):

关于python - 比较字典中所有值的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40878785/

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