• 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复制了。

    人工智能芯片与自动驾驶
  • 相关阅读:
    zedGraph画心电图
    多窗体之间进行数据通信 传值
    C#共有五种访问修饰符:public、private、protected、internal、protected internal。作用范围如下表:
    Linux进程调度与切换
    Linux学习总结
    Linux内核如何启动并装载一个可执行程序
    Linux编写Shell脚本入门
    如何使用委托
    深入剖析反射
    浅析C#中的文件操作
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/14193082.html
Copyright © 2020-2023  润新知