2.4.1 随机数

本节介绍的函数如表2-3所示。

表2-3 本节要介绍的函数

numpy.random模块中提供了大量的随机数相关的函数,为了方便后面用随机数测试各种运算函数,让我们首先来看看如何产生随机数:

●rand()产生0到1之间的随机浮点数,它的所有参数用于指定所产生的数组的形状。

●randn()产生标准正态分布的随机数,参数的含义与rand()相同。

●randint()产生指定范围的随机整数,包括起始值,但是不包括终值,在下面的例子中,产生0到9的随机数,它的第三个参数用于指定数组的形状:

random模块提供了许多产生符合特定随机分布的随机数的函数,它们的最后一个参数size都用于指定输出数组的形状,而其他参数都是分布函数的参数。例如:

●normal():正态分布,前两个参数分别为期望值和标准差。

●uniform():均匀分布,前两个参数分别为区间的起始值和终值。

●poisson():泊松分布,第一个参数指定λ系数,它表示单位时间(或单位面积)内随机事件的平均发生率。由于泊松分布是一个离散分布,因此它输出的数组是一个整数数组。

permutation()可以用于产生一个乱序数组,当参数为整数n时,它返回[0,n)这n个整数的随机排列;当参数为一个序列时,它返回一个随机排列之后的序列:

    a = np.array([1, 10, 20, 30, 40])
    print nr.permutation(10)
    print nr.permutation(a)
    [2 4 3 5 6 8 0 1 9 7]
    [40  1 10 20 30]

permutation()返回一个新数组,而shuffle()则直接将参数数组的顺序打乱:

    nr.shuffle(a)
    a
    array([ 1, 20, 30, 10, 40])

choice()从指定的样本中随机进行抽取:

●size参数用于指定输出数组的形状。

●replace参数为True时,进行可重复抽取,而为False时进行不重复抽取,默认值为True。所以在下面的例子中,c1中可能有重复数值,而c2中的每个数值都是不同的。

●p参数指定每个元素对应的抽取概率,如果不指定,所有的元素被抽取到的概率相同。在下面的例子中,值越大的元素被抽到的概率越大,因此c3中数值较大的元素比较多。

为了保证每次运行时能重现相同的随机数,可以通过seed()函数指定随机数的种子。在下面的例子中,计算r3和r4之前,都使用42作为种子,因此得到的随机数组是相同的: