使用哈希算法哈希化后的值作为 numpy.random.RandomState 的种子

4

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

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

I get:

ValueError: object of too small depth for desired array

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

1个回答

4

首先,随机状态种子是一个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)

2
它还可以同时接受一个32位整数数组。 seed = np.frombuffer(hash.digest(), dtype=np.uint32) - Robert Kern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接