Art*_*oul 5 python arrays hash performance numpy
我正在为NumPy寻找最好的64-bit(或至少是32-bit)具有下一个属性的哈希函数:
dtype. 为此,这种散列能够仅处理原始字节块就足够了。xxhash.64-bit整数或更大的输出,但如果是,32-bit那么仍然可以,尽管不是那么可取。如果可能的话,最好选择生成 32、64、128 位大小的散列。xxhash如果它有numpy数组矢量化,我会使用上面链接提到的。但是现在它只是单个对象,它的绑定函数每次调用只接受一个字节块,产生一个整数输出。并且 xxhash 每次调用小(4、8 个字节)输入时只使用几个 CPU 周期,因此可能在大数组上执行纯 Python 循环来为每个数字调用 xxhash 效率非常低。
我需要它用于不同的事情,一个是概率存在过滤器(或集合),即我需要设计这样的结构(集合),N如果请求的元素可能在集合中或不是。为此,我想使用较低的散列位将输入分布到K存储桶中,并且每个存储桶还存储一些(可调整的)较高位的数量,以增加正确答案的概率。另一个应用是布隆过滤器。我需要这个集合在添加和请求时非常快,并且在内存中尽可能紧凑,并处理非常多的元素。
如果没有现有的好的解决方案,那么也许我还可以改进xxhash库并向作者的存储库创建拉取请求。
我会这样做:
from xxhash import xxh3_64
def hash_numpy(array):
return xxh3_64(array.tobytes()).digest()
Run Code Online (Sandbox Code Playgroud)
我不认为你能变得更好。我蹩脚的基准测试表明,在我蹩脚的笔记本电脑(旧的 i3 CPU)上,每秒哈希 2 亿个浮点数。