MurmurHash (MurmurHash3) 的 Python 包装器,一组快速且强大的哈希函数。
项目描述
mmh3
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_64
、manylinux2010_x86_64
、manylinux2014_aarch64
、win32
、win_amd64
、macosx_10_9_x86_64
和macosx_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 结果的最终修改,未来的任何更改都只是为了提高性能。
执照
已知的问题
从其他基于 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(以及其他一般哈希算法)进行高性能计算的重要资源。
- 第 11 章:在 Micha Gorelick 和 Ian Ozsvald 中使用 Less Ram。2014.高性能 Python:人类实用高性能编程。奥莱利媒体。国际标准书号:978-1-4493-6159-4。
- 杜克大学。有效地将数据存储在内存中。
- 马克斯·伯斯坦。创建一个简单的布隆过滤器。
- 布格拉·阿基尔迪兹。布隆过滤器简介。
类似的库
- https://github.com/wc-duck/pymmh3:纯python中的mmh3(Fredrik Kihlander和Swapnil Gusani)
- https://github.com/escherba/python-cityhash:CityHash的 Python 绑定(Eugene Scherba)
- https://github.com/veelion/python-farmhash:FarmHash的 Python 绑定(Veelion Chong)
- https://github.com/escherba/python-metrohash:MetroHash的 Python 绑定(Eugene Scherba)
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置发行版
mmh3-3.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d1ec578c09a07d3518ec9be540b87546397fa3455de73c166fcce51eaa5c41c5 |
|
MD5 | 6dd90b3f272c5e9e21ba1d8646db5b7c |
|
布莱克2-256 | 4a5478c7f04ceee4913cbe7b33e253867c1da2291c80dfa6062dc6aaabb6cef8 |
mmh3-3.0.0 -cp39-cp39-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bd870aedd9189eff1cf4e1687869b56c7e9461ee869789139c3e704009e5c227 |
|
MD5 | 4208e7583eef0765388d43ae953a4251 |
|
布莱克2-256 | f4aa8a820c4253ea8d5b51fc141aa012abb9595d5529bc7057ccb21f6d023d78 |
mmh3-3.0.0 -cp39-cp39-win32.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 150439b906b4deaf6d796b2c2d11fb6159f08d02330d97723071ab3bf43b51df |
|
MD5 | cd0a9c2628a16bb803349bd7c202492b |
|
布莱克2-256 | 02c221e90351b51a9a7f1f1de5d9f7e3cea26302c835ed3db985bc27b28f3f9c |
mmh3-3.0.0 -cp39-cp39-manylinux2014_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c17fe2e276edd37ad8a6aff3b1663d3479c2c5c5993539c1050422a1dae33033 |
|
MD5 | f5c51a7cbb3cf04667754950c76b9073 |
|
布莱克2-256 | c82c424d53c62fb3488f71b81cc562dc57699eedd3841042361dfe63d9eaf831 |