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許可獲得許可。有關詳細信息,請參見隨附的許可證文件。