跳转到主要内容

Python对MurmurHash (MurmurHash3)的封装,一套快速且健壮的非加密哈希函数。

项目描述

mmhash3

由于原始库 mmh3 未维护,因此是它的分支。

mmhash3是MurmurHash (MurmurHash3)的Python封装,由Austin Appleby发明的一组快速且健壮的非加密哈希函数。

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

如何使用

安装

pip install mmhash3 # for macOS, use "pip3 install mmhash3" 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返回两个值,因为它使用MurmurHash3的128位版本作为后端。

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

hash64hash128hash_bytes具有第三个参数用于架构优化。对于x64使用True,对于x86(默认)使用False

>>> 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 环境的支持。感谢 Matthew Honnibal
  • 放弃对 Python 2.7、3.3、3.4 和 3.5 的支持。
  • 增加了对 Python 3.7、3.8、3.9、3.10 和 3.11 的支持
  • 将 Travis CI 和 AppVeyor 迁移到 GitHub Actions。

2.5.1 (2017-10-31)

  • 修复了 hash_bytes 的错误。感谢 doozr

2.5 (2017-10-28)

  • 增加了 hash_from_buffer。感谢 Dimitri Vorona
  • 增加了一个关键字参数 signed

2.4 (2017-05-27)

  • 支持使用 32 位无符号整数作为种子;感谢 Alexander Maznev
  • 支持 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)

  • 增加了 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,其中包含鲁棒性改进和细微调整。

请注意,由于这次修订,2.1 版本的 32 位结果与 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 位 int 更改为无符号 32 位 int。使用有符号种子产生的值仍然与之前相同,只要它们是 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(以及一般哈希算法)进行高性能计算的优秀资源。

类似库

项目详情


下载文件

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

源代码分发

mmhash3-3.0.1.tar.gz (11.9 kB 查看哈希值)

上传时间 源代码

构建版本

mmhash3-3.0.1-cp311-cp311-win_amd64.whl (14.9 kB 查看哈希值)

上传时间 CPython 3.11 Windows x86-64

mmhash3-3.0.1-cp311-cp311-win32.whl (14.5 kB 查看哈希值)

上传时间 CPython 3.11 Windows x86

mmhash3-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (38.7 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ ARM64

mmhash3-3.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (38.0 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

mmhash3-3.0.1-cp311-cp311-macosx_11_0_arm64.whl (13.0 kB 查看哈希值)

上传时间 CPython 3.11 macOS 11.0+ ARM64

mmhash3-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl (12.3 kB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ x86-64

mmhash3-3.0.1-cp310-cp310-win_amd64.whl (14.9 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

mmhash3-3.0.1-cp310-cp310-win32.whl (14.5 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86

mmhash3-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (38.7 kB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ ARM64

mmhash3-3.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (38.0 kB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

mmhash3-3.0.1-cp310-cp310-macosx_11_0_arm64.whl (13.0 kB 查看哈希值)

上传时间: CPython 3.10 macOS 11.0+ ARM64

mmhash3-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl (12.3 kB 查看哈希值)

上传时间: CPython 3.10 macOS 10.9+ x86-64

mmhash3-3.0.1-cp39-cp39-win_amd64.whl (14.9 kB 查看哈希值)

上传时间: CPython 3.9 Windows x86-64

mmhash3-3.0.1-cp39-cp39-win32.whl (14.4 kB 查看哈希值)

上传时间: CPython 3.9 Windows x86

mmhash3-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (38.6 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ ARM64

mmhash3-3.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.9 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

mmhash3-3.0.1-cp39-cp39-macosx_11_0_arm64.whl (12.9 kB 查看哈希值)

上传时间: CPython 3.9 macOS 11.0+ ARM64

mmhash3-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl (12.3 kB 查看哈希值)

上传时间: CPython 3.9 macOS 10.9+ x86-64

mmhash3-3.0.1-cp38-cp38-win_amd64.whl (14.9 kB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

mmhash3-3.0.1-cp38-cp38-win32.whl (14.4 kB 查看哈希值)

上传于 CPython 3.8 Windows x86

mmhash3-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (39.3 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

mmhash3-3.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (38.6 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

mmhash3-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl (12.3 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ x86-64

mmhash3-3.0.1-cp37-cp37m-win_amd64.whl (14.9 kB 查看哈希值)

上传于 CPython 3.7m Windows x86-64

mmhash3-3.0.1-cp37-cp37m-win32.whl (14.4 kB 查看哈希值)

上传于 CPython 3.7m Windows x86

mmhash3-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (39.0 kB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ ARM64

mmhash3-3.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (38.3 kB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

mmhash3-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl (12.2 kB 查看哈希值)

上传于 CPython 3.7m macOS 10.9+ x86-64

mmhash3-3.0.1-cp36-cp36m-win_amd64.whl (15.0 kB 查看哈希值)

上传于 CPython 3.6m Windows x86-64

mmhash3-3.0.1-cp36-cp36m-win32.whl (14.5 kB 查看哈希值)

上传于 CPython 3.6m Windows x86

mmhash3-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (38.9 kB 查看哈希值)

上传于 CPython 3.6m manylinux: glibc 2.17+ ARM64

mmhash3-3.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (38.2 kB 查看哈希值)

上传于 CPython 3.6m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

mmhash3-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl (12.2 kB 查看哈希值)

上传于 CPython 3.6m macOS 10.9+ x86-64

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页