随机Numpy数组的元素种子

时间:2016-06-07 14:20:58

标签: python arrays numpy random

我正在尝试生成可能较大的float数组(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])

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

[ 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的速度?

1 个答案:

答案 0 :(得分:4)

不是,不。 PRNG旨在从单个种子输出许多数字的流,numpy.random的API就是围绕它设计的。如果由于某种原因需要从[0, 1)内的整数到浮点数的任意可重复映射,您当然可以自己进行循环。可能还有其他这样的映射可以更容易和更快地使用。

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