Farmhash和Cityhash的Python包装纸,这是一个快速的非晶体学哈希功能的家族。
从PYPI安装:
pip install cityhash在Conda环境中安装:
conda install -c conda-forge python-cityhash该包分别在cityhash和farmhash名称空间下暴露了Python Apis的Cityhash和Farmhash。每个都提供32-,64和128位实现。
农业的用法示例:
> >> from farmhash import FarmHash32 , FarmHash64 , FarmHash128
> >> FarmHash32 ( "abc" )
1961358185
> >> FarmHash64 ( "abc" )
2640714258260161385
> >> FarmHash128 ( "abc" )
76434233956484675513733017140465933893指纹是无种子的哈希,可以保证与硬件和平台无关。这对于需要持续存在的哈希值的网络应用程序很有用。
> >> from farmhash import Fingerprint128
> >> Fingerprint128 ( "abc" )
76434233956484675513733017140465933893Cityhash和Farmhash不支持渐进的哈希,因此对于散列角色流的理想是不理想的。如果需要增量哈希,请考虑另一个哈希库,例如Metrohash或XXHASH。
缓冲协议允许Python对象将其数据公开为RAW BYTE数组,以便快速访问,而无需复制到内存中的单独位置。 Numpy是一个广泛使用此协议的知名库。
此软件包中的所有哈希功能都将从对象中读取字节数组,这些数数通过缓冲区协议揭示它们。这是一个示例,显示了一个四维numpy阵列的哈希:
> >> import numpy as np
> >> from farmhash import FarmHash64
> >> arr = np . zeros (( 256 , 256 , 4 ))
> >> FarmHash64 ( arr )
1550282412043536862需要连续的numpy阵列才能工作。要转换一个非连续数组,请使用Numpy的ascontiguousarray()函数。
对于X86-64平台,此软件包的PYPI存储库包括带有SSE4.2支持的车轮。 32位和64位(但没有128位)的Farmhash变体从SSE4.2指令中受益匪浅。
Vanilla Cityhash功能(在cityhash模块下)不利用SSE4.2。取而代之的是,可以使用此软件包中提供的cityhashcrc模块,该软件包揭示了可容纳SSE 4.2的128位和256位CRC功能。这些功能非常快,并且速度击败FarmHash128 (Farmhash不包括256位功能)。由于Farmhash是Cityhash的预期继任者,因此我会在使用Cityhash-CRC功能之前要小心,但是可以验证它们是否为您的预期应用提供足够的随机性。
对于那些想要贡献的人,这是使用“制作命令:”快速启动:
git clone https://github.com/escherba/python-cityhash.git
cd python-cityhash
make env # create a virtual environment
make test # run Python tests
make cpp-test # run C++ tests
make shell # enter IPython shell要找出哪些使目标可用,请输入:
make help包装轮是使用Cibuildwheel构建的,并使用GitHub操作分配给PYPI。车轮包含编译的二进制文件,可用于以下平台:Windows-AMD64,Ubuntu-X86,Linux-X86_64,Linux-Aarch64和MacOSX-X86_64。
有关其他快速的非晶量哈希功能,可作为Python扩展,请参见Metrohash,Murmurhash和XXHASH。
最初的Cityhash Python绑定是亚历山大[Amper] Marshalov造成的。尤金·舍尔巴(Eugene Scherba)在凯森(Cython)重写,后者还添加了法族人的绑定。 Cityhash和Farmhash算法及其C ++实施是Google的。
该软件已根据MIT许可获得许可。有关详细信息,请参见随附的许可证文件。