使用hashlib哈希种子numpy.random.RandomState

时间:2016-04-20 21:55:01

标签: python numpy random hashlib

我想使用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()),但我不知道这是否是正确的解决方案。我应该这样做还是会失去随机性?

1 个答案:

答案 0 :(得分:2)

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