Skip to main content

MurmurHash (MurmurHash3) 的 Python 包装器,一组快速且强大的哈希函数。

项目描述

mmh3

GitHub Super-Linter 构建传递 派皮版本 Python 版本 许可证:CC0-1.0 总下载量 最近的下载 康达版

mmh3 是MurmurHash (MurmurHash3)的 Python 包装器,MurmurHash3是由 Austin Appleby 发明的一组快速且强大的非加密哈希函数。

结合Bloom 过滤器MinHash特征散列等概率技术,mmh3 允许您在数据挖掘、机器学习和自然语言处理等领域开发高性能系统。

如何使用

安装:

pip install mmh3 # for macOS, use "pip3 install mmh3" and python3

快速开始:

>>> import mmh3
>>> mmh3.hash("foo") # returns a 32-bit signed int
-156908512
>>> mmh3.hash("foo", 42) # uses 42 as a seed
-1322301282
>>> mmh3.hash("foo", signed=False) # returns a 32-bit unsigned int
4138058784

其他功能:

>>> mmh3.hash64("foo") # two 64 bit signed ints (by using the 128-bit algorithm as its backend)
(-2129773440516405919, 9128664383759220103)
>>> mmh3.hash64("foo", signed=False) #  two 64 bit unsigned ints
(16316970633193145697, 9128664383759220103)
>>> mmh3.hash128("foo", 42) # 128 bit unsigned int
215966891540331383248189432718888555506
>>> mmh3.hash128("foo", 42, signed=True) # 128 bit signed int
-124315475380607080215185174712879655950
>>> mmh3.hash_bytes("foo") # 128 bit value as bytes
'aE\xf5\x01W\x86q\xe2\x87}\xba+\xe4\x87\xaf~'
>>> import numpy as np
>>> a = np.zeros(2 ** 32, dtype=np.int8)
>>> mmh3.hash_bytes(a)
b'V\x8f}\xad\x8eNM\xa84\x07FU\x9c\xc4\xcc\x8e'

注意hash64返回两个值,因为它使用 128 位版本的 MurmurHash3 作为其后端。

hash_from_buffer在没有内存复制的情况下散列字节。当您散列大型内存视图(例如numpy.ndarray.

>>> mmh3.hash_from_buffer(numpy.random.rand(100))
-2137204694
>>> mmh3.hash_from_buffer(numpy.random.rand(100), signed=False)
3812874078

hash64, hash128, 并hash_bytes具有架构优化的第三个参数。对 x64 使用 True,对 x86 使用 False(默认值:True):

>>> mmh3.hash64("foo", 42, True) 
(-840311307571801102, -6739155424061121879)

变更日志

3.0.0 (2021-02-23)

  • 由于cibuildwheel的强大功能,Python 轮子现在可用。
    • 支持的平台是manylinux1_x86_64manylinux2010_x86_64manylinux2014_aarch64win32win_amd64macosx_10_9_x86_64macosx_11_0_arm64(Apple Silicon)。
  • 添加对较新的 macOS 环境的支持。谢谢马修·霍尼巴尔
  • 放弃对 Python 2.7、3.3、3.4 和 3.5 的支持。
  • 添加对 Python 3.7、3.8 和 3.9 的支持。
  • 将 Travis CI 和 AppVeyor 迁移到 GitHub Actions。

2.5.1 (2017-10-31)

  • 错误修复hash_bytes。谢谢doozr

2.5 (2017-10-28)

  • 添加hash_from_buffer. 谢谢迪米特里沃罗纳
  • 添加关键字参数signed

2.4 (2017-05-27)

  • 支持 32 位无符号整数的种子;谢谢亚历山大·马兹涅夫
  • 支持64位数据(64位环境下)
  • 修复 Windows 系统下 Python 3.6 的编译错误。
  • 添加单元测试和与 Travis CI 和 AppVeyor 的持续集成。

2.3.2 (2017-05-26)

  • 从公共领域重新许可到CC0-1.0

2.3.1 (2015-06-07)

  • 修复 gcc >=5 的编译错误。

2.3 (2013-12-08)

  • Add hash128,它返回一个 128 位有符号整数。
  • 修复在极少数情况下可能导致内存泄漏的错误操作符。
  • 修复 Python/C API 函数的格式错误的值,这可能导致最近的 Python 3.x 版本中出现运行时错误。

前两个提交来自Derek Wilson。谢谢!

2.2 (2013-03-03)

  • 提高可移植性以支持具有旧 gcc(版本 < 4.4)的系统,例如 CentOS/RHEL 5.x。(来自Micha Gorelick的提交。谢谢!)

2.1 (2013-02-25)

  • 添加__version__常数。当以下修订对您的应用程序很重要时,请检查它是否存在。
  • 合并修订版 r147,其中包括稳健性改进和细微调整。

请注意,由于此版本,32 位版本 2.1 的结果与 2.0 的结果不同。例如,:

>>> mmh3.hash("foo") # in mmh3 2.0
-292180858
>>> mmh3.hash("foo") # in mmh3 2.1
-156908512

hash64 和 hash_bytes 的结果保持不变。Murmurhash 的作者 Austin Appleby 确保这次修订是对 MurmurHash3 结果的最终修改,未来的任何更改都只是为了提高性能。

执照

CC0-1.0

已知的问题

从其他基于 MurmurHash3 的库中获得不同的结果

默认情况下,由于历史原因,mmh3 返回32 位和 64 位版本的有符号值和符号值hash128请使用关键字参数signed来获得所需的结果。

有关与 Google Guava (Java) 的兼容性,请参阅https://stackoverflow.com/questions/29932956/murmur3-hash-different-result-between-python-and-java-implementation

给定非 32 位种子时的意外结果

2.4 版将种子类型从有符号的 32 位整数更改为无符号的 32 位整数。只要它们是 32 位的,带有签名种子的结果值仍然与以前相同。

>>> mmh3.hash("aaaa", -1756908916) # signed representation for 0x9747b28c
1519878282
>>> mmh3.hash("aaaa", 2538058380) # unsigned representation for 0x9747b28c
1519878282

请注意,这些种子不要超过 32 位。无效值可能会出现意外结果。

>>> mmh3.hash("foo", 2 ** 33)
-156908512
>>> mmh3.hash("foo", 2 ** 34)
-156908512

作者

MurmurHash3 最初由 Austin Appleby 开发并在公共领域分发。

Hajime Senuma 为 Python 移植和修改。

也可以看看

教程

以下教科书和教程是学习如何使用 mmh3(以及其他一般哈希算法)进行高性能计算的重要资源。

类似的库

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

mmh3-3.0.0.tar.gz (10.4 kB 查看哈希

已上传 source

内置发行版

mmh3-3.0.0-cp39-cp39-win_amd64.whl (15.2 kB 查看哈希

已上传 cp39

mmh3-3.0.0-cp39-cp39-win32.whl (14.7 kB 查看哈希

已上传 cp39

mmh3-3.0.0-cp39-cp39-manylinux2014_aarch64.whl (49.9 kB 查看哈希

已上传 cp39

mmh3-3.0.0-cp39-cp39-manylinux2010_x86_64.whl (49.3 kB 查看哈希

已上传 cp39

mmh3-3.0.0-cp39-cp39-manylinux1_x86_64.whl (49.3 kB 查看哈希

已上传 cp39

mmh3-3.0.0-cp39-cp39-macosx_11_0_arm64.whl (13.2 kB 查看哈希

已上传 cp39

mmh3-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl (12.6 kB 查看哈希

已上传 cp39

mmh3-3.0.0-cp38-cp38-win_amd64.whl (15.3 kB 查看哈希

已上传 cp38

mmh3-3.0.0-cp38-cp38-win32.whl (14.8 kB 查看哈希

已上传 cp38

mmh3-3.0.0-cp38-cp38-manylinux2014_aarch64.whl (50.7 kB 查看哈希

已上传 cp38

mmh3-3.0.0-cp38-cp38-manylinux2010_x86_64.whl (50.0 kB 查看哈希

已上传 cp38

mmh3-3.0.0-cp38-cp38-manylinux1_x86_64.whl (50.0 kB 查看哈希

已上传 cp38

mmh3-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl (12.6 kB 查看哈希

已上传 cp38

mmh3-3.0.0-cp37-cp37m-win_amd64.whl (15.2 kB 查看哈希

已上传 cp37

mmh3-3.0.0-cp37-cp37m-win32.whl (14.7 kB 查看哈希

已上传 cp37

mmh3-3.0.0-cp37-cp37m-manylinux2014_aarch64.whl (51.6 kB 查看哈希

已上传 cp37

mmh3-3.0.0-cp37-cp37m-manylinux2010_x86_64.whl (50.9 kB 查看哈希

已上传 cp37

mmh3-3.0.0-cp37-cp37m-manylinux1_x86_64.whl (50.9 kB 查看哈希

已上传 cp37

mmh3-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl (12.5 kB 查看哈希

已上传 cp37

mmh3-3.0.0-cp36-cp36m-win_amd64.whl (15.2 kB 查看哈希

已上传 cp36

mmh3-3.0.0-cp36-cp36m-win32.whl (14.7 kB 查看哈希

已上传 cp36

mmh3-3.0.0-cp36-cp36m-manylinux2014_aarch64.whl (49.9 kB 查看哈希

已上传 cp36

mmh3-3.0.0-cp36-cp36m-manylinux2010_x86_64.whl (49.2 kB 查看哈希

已上传 cp36

mmh3-3.0.0-cp36-cp36m-manylinux1_x86_64.whl (49.2 kB 查看哈希

已上传 cp36

mmh3-3.0.0-cp36-cp36m-macosx_10_9_x86_64.whl (12.5 kB 查看哈希

已上传 cp36