随机 Numpy 数组的元素级种子



我正在尝试生成潜在的大型浮点数数组(0.0-1.0),但每个元素都由种子数组驱动,种子数组由整数组成,表示一个id。

例如,如果有以下两个数组:

seedArray1 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
seedArray2 = np.array([0, 1, 2, 3, 4, 5])

我希望能够将这些数组用作种子,但是如果两个数组中的元素相同(无论数组长度的形状如何,或者该 id 恰好出现在数组中的位置),它应该生成相同的浮点数,如下所示:

[ 0.5488135 0.417022 0.4359949 0.5507979 0.96702984 0.22199317 0.89286015 0.07630829 0.8734294 0.01037415]
[ 0.5488135 0.417022 0.4359949 0.5507979 0.96702984 0.22199317]

但是,当我尝试设置 numpy.random 的随机种子时,我得到不同的结果:

import numpy as np
x1 = np.arange(10)
x2 = np.arange(6)
np.random.seed(x1)
print np.random.rand(x1.shape[0])
np.random.seed(x2)
print np.random.rand(x2.shape[0])

哪些打印:

[ 0.41060638  0.23192123  0.91382737  0.02916066  0.91437242  0.51045425 0.26140116  0.16574922  0.08861477  0.31908955]
[ 0.52500897  0.98236732  0.99371835  0.14121932  0.66945133  0.24223304]

有没有办法生成随机的numpy数组,使用每个元素作为种子,并且仍然利用numpy的速度?

不是真的,不是。PRNG被设计为从单个种子输出许多数字的流,numpy.random的API就是围绕这一点而设计的。当然,如果您出于某种原因需要从整数到[0, 1)浮点数的任意、可重复映射,您可以自己执行循环。可能还有其他更容易、更快捷的此类映射。

y = [np.random.RandomState(seed).rand() for seed in seed_array]

最新更新