python汉明距离_利用python高效计算hamming距离

python中的distance包提供了一个hamming距离计算器:import distance

distance.levenshtein("lenvestein", "levenshtein")

distance.hamming("hamming", "hamning")

还有一个提供levenshtein距离计算的levenshtein包。最后difflib可以提供一些简单的字符串比较。

在this old question上有关于所有这些的更多信息和示例代码。

您现有的代码速度很慢,因为您在最内部的循环中重新计算文件哈希,这意味着每个文件都会被哈希多次。如果首先计算哈希值,则该过程将更高效:files = ...

files_and_hashes = [(f, pHash.imagehash(f)) for f in files]

file_comparisons = [

(hamming(first[0], second[0]), first, second)

for second in files

for first in files

if first[1] != second[1]

]

这个过程从根本上涉及到O(N^2)比较,因此要以适合map-reduce问题的方式分发它,需要获取完整的字符串集,并将它们划分为B块,其中B^2 = M(B=字符串块的数目,M=工作者的数目)。因此,如果你有16个字符串和4个工作线程,你可以将字符串列表分成两个块(因此块大小为8)。划分工作的示例如下:all_strings = [...]

first_8 = all_strings[:8]

last_8 = all_strings[8:]

compare_all(machine_1, first_8, first_8)

compare_all(machine_2, first_8, last_8)

compare_all(machine_3, last_8, first_8)

compare_all(machine_4, last_8, last_8)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值