我正在尝试生成可能较大的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的速度?
答案 0 :(得分:4)
不是,不。 PRNG旨在从单个种子输出许多数字的流,numpy.random
的API就是围绕它设计的。如果由于某种原因需要从[0, 1)
内的整数到浮点数的任意可重复映射,您当然可以自己进行循环。可能还有其他这样的映射可以更容易和更快地使用。
y = [np.random.RandomState(seed).rand() for seed in seed_array]