使用 hashlib 散列种子 numpy.random.RandomState
Seed numpy.random.RandomState with hashlib hash
我想使用 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())
但我不知道这是否是正确的解决方案。我应该这样做还是会失去随机性?
首先,随机状态种子是一个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)
我想使用 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())
但我不知道这是否是正确的解决方案。我应该这样做还是会失去随机性?
首先,随机状态种子是一个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)