【问题标题】:Seed numpy.random.RandomState with hashlib hash使用 hashlib 哈希播种 numpy.random.RandomState
【发布时间】:2016-04-20 21:55:01
【问题描述】:

我想用 hashlib 生成的哈希为 numpy.random.RandomState 实例播种,以使伪随机源始终为相同的输入数据生成相同的值。当我尝试这样做时:

hash = sha256(some_data)
RandomState(seed=hash.digest())

我明白了:

ValueError: object of too small depth for desired array

我可以做map(ord, hash.digest()),但我不知道这是否是正确的解决方案。我应该这样做还是会失去随机性?

【问题讨论】:

    标签: python numpy random hashlib


    【解决方案1】:

    首先,随机状态种子是一个 32 位无符号整数,因此它无法使用您正在生成的完整 256 位哈希。

    感谢下方评论者指出种子可以是 32 位(无符号)整数数组;您可以将哈希转换为这样的数组,如下所示:

    import numpy as np
    from hashlib import sha256
    
    data = np.random.rand(1000)
    hash = sha256(data)
    seed = np.frombuffer(hash.digest(), dtype='uint32')
    
    rstate = np.random.RandomState(seed)
    

    【讨论】:

    • 它也可以采用 32 位整数数组。 seed = np.frombuffer(hash.digest(), dtype=np.uint32)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多