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
hash64
、hash128
和hash_bytes
具有第三个参数用于架构优化。对于x64使用True,对于x86(默认)使用False
>>> 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 环境的支持。感谢 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 结果的最终修改,任何未来的更改都只是为了提高性能。
许可证
已知问题
与其他 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(以及一般哈希算法)进行高性能计算的优秀资源。
- 第 11 章:使用更少的 Ram(来自 Micha Gorelick 和 Ian Ozsvald。2014。《高性能 Python:面向人类的实用高效编程》。O'Reilly 媒体。ISBN:978-1-4493-6159-4。)
- Duke 大学。内存中的数据高效存储。
- Max Burstein。创建简单的 Bloom 过滤器。
- Bugra Akyildiz。Bloom 过滤器的简单介绍。
类似库
- 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)
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建版本
mmhash3-3.0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a00d68f4a1cc434b9501513c8a29e18ed1ddad383677d72b41d71d0d862348af |
|
MD5 | c47c0e4005a905a07ad2f873f4fac71f |
|
BLAKE2b-256 | 46018ec6d864b53a9400676db27f30cd7f0848ec2e12f647cdc3c8639f890f60 |
mmhash3-3.0.1-cp311-cp311-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 538240ab7936bf71b18304e5a7e7fd3c4c2fab103330ea99584bb4f777299a2b |
|
MD5 | 5e593733ca1677ff9950b0769f15871c |
|
BLAKE2b-256 | 324f85f1e14ddd9b1a5098d7b780db7e733c3c5362dacdc0353ab92e7913d4a4 |
mmhash3-3.0.1-cp311-cp311-win32.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 22f92f0f88f28b215357acd346362fa9f7c9fffb436beb42cc4b442b676dbaa3 |
|
MD5 | 48af5375665ea1ba80be862620997d00 |
|
BLAKE2b-256 | 7ae76f0663feeba2d056f6e1b4e30126b90a35f9ceadbdcf61c742fb05f94370 |
mmhash3-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b4b0914effe4ddd8d33149e3508564c17719465b0cc81691c4fa50d5e0e14f80 |
|
MD5 | 75a3bd1a5bad8f067001291901ac4d8b |
|
BLAKE2b-256 | be3093161a5c78b26b2e93fb4c623db66bfec1c29188993f4b348797b037aa08 |
mmhash3-3.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c0575050ac691475938df1ad03d8738c5bd1eadef62093e76157ebb7f2df0946 |
|
MD5 | ef6586809c60640d24c6c53bd0165d34 |
|
BLAKE2b-256 | d41c997ca36925d72492a3c3a81ae1abc30b8cb1143579672e2ca8e8856d35c9 |
mmhash3-3.0.1-cp311-cp311-macosx_11_0_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | de7895eafabc32f7c0c09a81a624921f536768de6e438e3de69e3e954a4d7072 |
|
MD5 | e8ceac7f981380abc0e88d567fddb37b |
|
BLAKE2b-256 | fed6d081d6829df72583ba345758d922c84dbbab17effe110827410c445c6984 |
mmhash3-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b172f3bd3220b0bf56fd7cc760fd8a9033def47103611d63fe867003079a1256 |
|
MD5 | faffbe69efce1ceb8f2feb655f27eea6 |
|
BLAKE2b-256 | 699140b4c1df69dcacba9ceab8cd22ae793597b1f6137a53026cb42e0cd56aca |
哈希值 用于 mmhash3-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4675585617584e9e1aafa3a90ac0ac9a437257c507748d97de8b21977e9d6745 |
|
MD5 | facb0ec798f074800941b6ff214ae256 |
|
BLAKE2b-256 | 71fc274e8bb0ad83baa5a4f4b5a2e1784f03ab39543566b24abd9b8ffc591a0f |
哈希值 用于 mmhash3-3.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ebfd0c2af09b41f0fe1dd260799bda90a0fc7eba4477ccaeb3951527700cd58f |
|
MD5 | cf5e02ef3b3363d35c8670cf0984cab3 |
|
BLAKE2b-256 | 9517d7081dea9a52237e87d673436ce8834a940a0cdcacef1266018a520b2e0b |
哈希值 用于 mmhash3-3.0.1-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ecdaf4d1de617818bf05cd526ca558db6010beeba7ea9e19f695f2bdcac0e0a4 |
|
MD5 | 0048a434aa9e9c0f85bf3c23b5be922e |
|
BLAKE2b-256 | 250ab334256657eb9646fda72064453903500a31dd04187bf63843c46b48eccf |
哈希值 用于 mmhash3-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 47deea30cd8d3d5cd52dc740902a4c70383bfe8248eac29d0877fe63e03c2713 |
|
MD5 | 7972783103f3d0d553cc8aa40fce3442 |
|
BLAKE2b-256 | 4ac51f2c16fbe0cea2d40bcb73c6a538943de4e347ac3d94c50e9f631c7faad4 |
哈希值 用于 mmhash3-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d6ac8a5f511c60f341bf9cae462bb4941abb149d98464ba5f4f4548875b601c6 |
|
MD5 | fcc841e8ce7098d538642fc9c6abb17b |
|
BLAKE2b-256 | 75529801b23bdcbd2990c569aa86e4ab536120577813321b8f6781ac210d945c |
哈希值 用于 mmhash3-3.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | efef9e632e6e248e46f52d108a5ebd1f28edaf427b7fd47ebf97dbff4b2cab81 |
|
MD5 | 3ba5db4347e4587a9d0478f0d796e0ee |
|
BLAKE2b-256 | fc80ca6be44ada32bc8197cc7465659eaa71a159b94338fd64ba45b60420cea4 |
哈希值 用于 mmhash3-3.0.1-cp39-cp39-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6b7ef2eb95a18bcd02ce0d3e047adde3a025afd96c1d266a8a0d44574f44a307 |
|
MD5 | fda128e3de761d0b16881f819b03441e |
|
BLAKE2b-256 | d826419ad694833a8664cc4a3132b2b53a53f92786d5c480a8049bdaccd2afbe |
哈希值 用于 mmhash3-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d3f333286bb87aa9dc6bd8e7960a55a27b011a401f24b889a50e6d219f65e7c9 |
|
MD5 | 98bcec7239088e2d7c63fe39d807c794 |
|
BLAKE2b-256 | 4f0337764be67937b7e21b2e0b72214b4da75c557c45fd79a7354701c1ed7e7b |
哈希值 for mmhash3-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c9056196d5e3d3d844433a63d806a683f710ab3aaf1c910550c7746464bc43ae |
|
MD5 | 17f10ec67f76f7c4710eada931c62a46 |
|
BLAKE2b-256 | 65193722fca323cb6a44331b7c5ee794d6009dd37b0834603a7f05dfbf470f7f |
哈希值 for mmhash3-3.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a0d4c307af0bf70207305f70f131898be071d1b19a89f462b13487f5c25e8d4e |
|
MD5 | 6958c212663aafed6b99702affd42d58 |
|
BLAKE2b-256 | 9f6eabf02c79fe0f573e0913b2e5e87302b66240845fa81db12aacb7added433 |
哈希值 for mmhash3-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2479899e7dda834a671991a1098a691ab1c2eaa20c3e939d691ca4a19361cfe0 |
|
MD5 | cc374a7fc3e93226e1d2c5a0e7243041 |
|
BLAKE2b-256 | b5af8e934fbd155faa83c708b08d403babe0eae1c2986481040a7938be52922c |
哈希值 for mmhash3-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6d51b1005233141ce7394531af40a3f0fc1f274467bf8dff44dcf7987924fe58 |
|
MD5 | ebe3ff537b24c627e39582533b993007 |
|
BLAKE2b-256 | 815fbb97e5b6916fd5a3593578b162d11859663cde46bfd664f232641c46a5e1 |
哈希值 for mmhash3-3.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 855c67b100e37df166acf79cdff58fa8f9f6c48be0d1e1b6e9ad0fa34a9661ef |
|
MD5 | f67880418f9750818587e93469e3a8ba |
|
BLAKE2b-256 | 6b44f5b771b36fbf0118e108f8e94c2aeaf2f5f9e0760f3935087e338f6eaf48 |
哈希值 for mmhash3-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0cfd91ccd5fca1ba7ee925297131a15dfb94c714bfe6ba0fb3b1ca78b12bbfec |
|
MD5 | 2530828072aaf89a07266feec9ed1066 |
|
BLAKE2b-256 | b311f838ff82406eb2088134b169cc56e7f94b13f66d99683518ce1f337468f6 |
哈希值 for mmhash3-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b41708f72c6aa2a49ada1f0b61e85c05cd8389ad31d463fd5bca29999a4d5f9c |
|
MD5 | 3da51e5b562335b5b7b85cbc5c094566 |
|
BLAKE2b-256 | 459e0d4ad3ad169ad8a7e604aa41303760bff5c3b6115b7f18bb11bd1ec7ffba |
哈希值 用于 mmhash3-3.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a3ce9b4533ddc0a88ba045a27309714c3b127bd05e57fd252d1d5a71d4247ea7 |
|
MD5 | 74da47ab97b38b1c3689b64916672370 |
|
BLAKE2b-256 | 1507bcab16d3dd832bfdc1216b1d69a4b7d6c6738ce439ee837af04de1caa499 |
哈希值 用于 mmhash3-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ca791bfb311e36ce13998e4632262ed4b95da9d3461941e18b6690760171a045 |
|
MD5 | ef2fe8383dda60d6a8bf86e697baae1e |
|
BLAKE2b-256 | c5bd7f1ede3598b217116860142a24870028ed48c4dda97fb441cd1a3b1bdea1 |