Hashing散列注意事项
Hashing散列注意事項
Numba支持內置功能hash(),只需__hash__()在提供的參數上調用成員函數即可 。這使得添加對新類型的哈希支持變得微不足道,這是因為擴展APIoverload_method()裝飾器的應用程序,需要重載用于為注冊到該類型的__hash__()方法的新類型,計算哈希值的函數。例如:
from numba.extending import overload_method
@overload_method(myType, ‘hash’)
def myType_hash_overload(obj):
# implementation details
實施
Numba哈希函數的實現,嚴格遵循Python 3的實現。唯一的例外是,對于Unicode和字節(內容長于sys.hash_info.cutoff)進行哈希,唯一受支持的算法是 siphash24(CPython 3中的默認值)。結果,默認條件下,Numba將為所有受支持的類型匹配Python 3哈希值。
Unicode哈希緩存差異
Numba和CPython Unicode字符串內部表示形式都有一個hash 成員,用于緩存字符串的哈希值。總是在計算散列值之前檢查該成員,并且僅從緩存中提供一個值就可以了,因為這樣做便宜得多。Numba Unicode字符串哈希緩存實現的行為與CPython的行為類似。唯一值得注意的行為更改(其唯一影響是性能的潛在變化)是,Numba始終計算并緩存在將其load,在Python中重用時創建的Unicode字符串的哈希,與CPython相比,這在某些情況下太快了。CPython可能會延遲根據創建方法對新Unicode字符串進行哈希處理的時間。還應注意,Numba在Unicode字符串復制nopython modehash 的CPython內部表示形式的成員時,將其拆分成其自己的表示形式,不重新計算已經具有與之關聯的哈希值的字符串的哈希。
PYTHONHASHSEED的Accommodation
PYTHONHASHSEED環境變量可用于后續的CPython的散列算法。例如,Numba哈希實現直接讀取CPython哈希算法的內部狀態,結果,在Numba的哈希實現中,PYTHONHASHSEED復制了。
總結
以上是生活随笔為你收集整理的Hashing散列注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 适用于CUDA GPU的Numba 随机
- 下一篇: 关于Numba的线程实现的说明