随机数生成(numeric.random)

numeric.random包中包含一些生成随机数的函数:random(size)函数生成指定size的[0, 1)范围的随机数或数组; rand(d0, d1, …, dn)函数生成n维随机数组,randn函数生成正态分布的随机数组;randint(low, [high, size]) 函数生成[low, high)范围的整数。

>>> random.random(5)
array([0.7120722502780094, 0.7285606928111786, 0.9501585619503155, 0.9665260911436336, 0.23553147325993318])
>>> random.rand(2,3)
array([[0.4658542538619157, 0.2759412614799148, 0.5274271669862279]
      [0.8195906996167274, 0.9739781724332607, 0.44585042150460574]])
>>> random.randint(1, 10, size=10)
array([1, 5, 5, 5, 8, 7, 2, 5, 1, 5])

seed函数用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed值,则每次生成的随即数都相同,如果不设置这个值, 则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。seed(None)相当于取消seed值设置。

>>> random.rand()
0.28557379561026175
>>> random.rand()
0.2235382498062879
>>> random.seed(10)
>>> random.rand()
0.7304302967434272
>>> random.rand()
0.7304302967434272
>>> random.seed(None)
>>> random.rand()
0.26737134272585183

shuffle和permutation函数对数组进行随机洗牌,shuffle是在数组内部洗牌,permutation是生成一个新的洗牌后的数组, 不改变原数组的元素顺序。

>>> a = arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> random.shuffle(a)
>>> a
array([7, 2, 9, 5, 1, 4, 3, 8, 6, 0])
>>> a = arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = random.permutation(a)
>>> b
array([6, 3, 5, 0, 1, 8, 9, 4, 7, 2])
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

random包中还有一些函数来生成特定分布的随机数,如f、exponential、gamma、gumbel、laplace、logistic、lognormal、 normal、pareto、poisson、standard_t、triangular、uniform、weibull等。