十六进制字符串的快速汉明距离计算

hexhamming的Python项目详细描述


PipPrsTravis

为什么还要建一个哈明距离图书馆?

有很多很棒的(python)库提供计算方法 各种编辑距离,包括汉明距离:距离,文本距离, 松鼠、水母等。

在这种情况下,我需要一个处理十六进制的hamming距离库 字符串(即pythonstr)并执行得非常快。 此外,我通常不关心大于256位的十六进制字符串。 长度约束与所有其他库不同,并使我 通过numbanumpy甚至 SSE/AVX

最后,我想最小化依赖关系,这意味着您不需要安装 ^{TT3}$,^{TT6}$,^{TT7}$,^{TT8}$,^{TT9}$等。

最后,在玩了gmpy.popcountnumba.jit之后, pythran.runnumpyAVX2,我决定写我想要的东西 在一个原始C++头中。注意:我开发的唯一C++特性是C++异常; 没有这个,这很容易成为c。 int*,因此探索用fortran重新编写它没有什么意义。矢量化 这些技术还增加了 向量寄存器和普通寄存器;同时,将十六进制字符串转换为 来自char*的向量寄存器可摄取浮点被证明具有非平凡的 头顶上。

安装

要安装,请确保您有python 2.7或3.4+。运行:

pip install hexhamming

或从源安装:

git clone https://github.com/mrecachinas/hexhamming
cd hexhamming
python setup.py install # or pip install .

如果你想为hexhamming做贡献,你应该安装dev 依赖关系:

pip install -r requirements-dev.txt

并确保测试通过:

pytest # or tox -e py27,...

示例

使用基础C++扩展,可以简单地运行:

>>> from hexhamming import hamming_distance
>>> hamming_distance('deadbeef', '00000000')
24

使用基于查找的C++扩展,替换上述 hamming_distancehamming_distance_lookup

如果您的机器支持Intel SSE4/AVX2指令集, 将上面的hamming_distance替换为fast_hamming_distance。 注意:要使用fast_hamming_distance,十六进制字符串必须是64 字符或更少(即256位或更少)。

基准

下面是在我2016年初的1.2 GHz英特尔上使用pytest-benchmark的基准测试 M5 8 GB 1867 MHz LPDDR3 MacOS Mojave(10.14.3),带Python 2.7.15和 叮当-1000.11.45.5。

https://github.com/mrecachinas/hexhamming/blob/master/docs/benchmark.png?raw=true

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java数组。按字符串排序   如何使用Netbeans设置Java打印的页面大小   java有没有一种方法可以获取sparkjava/嵌入式jetty服务器的主线程执行器?   正则表达式Java正则表达式:需要更简单的解决方案   无法使用java解析XML   MySQL Java JDBC:如何获取自动递增列的名称?   java错误:“限定符必须是表达式”Android Studio   Spring+java。lang.NoClassDefFoundError:weblogic/logging/LogEntryFormatter   java将JList插入GridLayout   listview中的java Get selected复选框   使用CriteriaBuilder的java JPA左外部联接会导致错误:不允许部分对象查询维护缓存或进行编辑   java循环双链接列表addToHead和print   java更好地检测三角形按钮(libgdx)   java ConcurrentHashMap迭代保证人   java如何获取控制台。通过webdriver记录信息?   java Javafx阶段为空   java如何使用apachetika从excel文件中访问空白单元格   java使用SQlite数据库列填充AutoCompleteTextView   java如何在不使用idea构建整个maven项目的情况下运行主方法?