Numpy如何按照预先定义好的概率分布生成随机数
在本文中,我们将介绍在Numpy库中如何生成随机数,并按照预定义的概率分布进行随机数生成。
阅读更多:Numpy 教程
随机数生成器
在Numpy库中,有一个随机数生成器(Random Number Generator),即随机数种子。我们需要使用这个生成器来在程序中生成随机数,从而得到我们要的随机数序列。
在生成器中,有三个变量:随机数种子(Seed)、分布类型(Distribution)、大小(Size)。其中,随机数种子是一个整数,可以控制随机数生成的随机性;分布类型可以是均匀分布、正态分布、泊松分布、几何分布等,大小则指生成的随机数的数量。
均匀分布的随机数生成
均匀分布一般指落在某一范围内的数的概率相等,例如1~6的骰子,每个点数出现的概率都是1/6。
使用Numpy库生成均匀分布的随机数需要使用numpy.random.uniform()
函数。该函数中,我们需要定义生成最小值low
和最大值high
。
以下是一个均匀分布的随机数生成的示例代码:
import numpy as np
a = np.random.uniform(low=0.0, high=1.0, size=(5, 5))
print(a)
输出:
[[0.17667561 0.53952272 0.18688396 0.32082124 0.07391092]
[0.05950122 0.67040973 0.17638681 0.19101702 0.92910219]
[0.7777735 0.73880867 0.86690502 0.33714648 0.85065738]
[0.67314931 0.94455623 0.25062615 0.57916082 0.57317439]
[0.65918253 0.10920183 0.53564277 0.12746726 0.4505022 ]]
以上生成的随机数是在0.0到1.0范围内的均匀分布随机数。需要注意的是,生成的随机数范围不包括上界。
正态分布的随机数生成
正态分布是一种连续的概率分布,它的随机数具有“钟型曲线”的形状,例如人的身高和IQ都符合正态分布。
使用Numpy库生成正态分布的随机数需要使用numpy.random.normal()
函数。该函数中,我们需要定义随机数的平均值loc
和标准差scale
。
以下是一个正态分布的随机数生成的示例代码:
import numpy as np
b = np.random.normal(loc=0.0, scale=1.0, size=(5, 5))
print(b)
输出:
[[ 0.73306509 1.15175351 -0.303547 -1.27837833 -0.07256724]
[-0.82835562 -0.90911943 -0.70898744 0.75738862 1.43185985]
[ 0.0805 1.18642673 1.50975672 -0.51636389 0.30884356]
[-1.49169722 -0.8862813 -0.38697121 0.79699658 0.7714312 ]
[-0.73527864 1.03838275 0.93995322 0.45550506 1.04538662]]
以上生成的随机数是符合平均值为0,标准差为1的标准正态分布随机数。需要注意的是,正态分布随机数的范围一般是从负无穷到正无穷。
按照预定义概率分布生成随机数
有时,我们需要按照预定的概率分布生成随机数。在Numpy中,可以使用numpy.random.choice()
函数实现按照预定义概率分布生成随机数的操作。
以下是一个使用numpy.random.choice()
函数按照预定的概率分布生成随机数的示例代码:
import numpy as np
weights = [0.1, 0.3, 0.2, 0.4] # 定义概率分布
c = np.random.choice(4, 5, p=weights) # 生成5个按照weights分布的下标
print(c)
输出:
[3 1 0 3 3]
在上面的代码中,我们通过定义weights
变量来定义了一个概率分布。然后使用numpy.random.choice()
函数来生成5个随机数序列,每个数序列中的数是在[0, 1, 2, 3]
范围内的,并按照概率分布weights
来生成。最后,我们将生成的数字下标打印出来。
总结
Numpy库中提供了多种随机数生成函数,包括均匀分布、正态分布、泊松分布、几何分布等。同时,我们还可以按照预定义概率分布来生成随机数。在实际应用中,根据具体需求来选择合适的随机数生成函数和概率分布类型,可以高效地生成随机数序列,满足各种需求。