numpy random multinomial 多项式分布 函数入门介绍

NumPy是一个开源的Python科学计算库,我们在之前的文章中已经对其做了基本的介绍,而且也对numpy的数据结构、基础函数等做了入门的讲解。

numpy random是其很重要的一个模块,在此模块中有很多有实际应用价值的函数,每个函数都会对应一个或者多个数学场景。本篇旨在介绍其中的一个关于多项式分布取样本的函数– multinomial

1、multinomial介绍

numpy.random.multinomial(npvalssize=None)

  • n : int:实验次数
  • pvals:浮点数序列,长度p。P个不同结果的概率。这些值应该和为1(但是,只要求和(pvals[:-1])<=1,最后一个元素总是被假定为考虑剩余的概率)。
  • size : int 或 int的元组,可选。 输出形状。如果给定形状为(m,n,k),则绘制 mnk 样本。默认值为无,在这种情况下返回单个值。

返回值: ndarray,每个条目 [i,j,…,:] 都是从分布中提取的一个n维值。

多项式分布,从多项式分布中提取样本。

多项式分布是二项式分布的多元推广。做一个有P个可能结果的实验。这种实验的一个例子是掷骰子,结果可以是1到6。从分布图中提取的每个样本代表n个这样的实验。其值x_i = [x_0,x_1,…,x_p] 表示结果为i的次数。

2、实例介绍

官方文档中已经给出了非常简洁易懂的实例,我们直接拿过来摆一下。这个实例就是掷骰子

场景描述:我们知道骰子一共是6面,每个面代表一个数字,分别是1、2、3、4、5、6.我们每次抛骰子得到的数字公概率上来讲都是等概率的1/6;那么我们做一组实验,抛20次骰子得到的样本会是什么样的呢?通过 numpy.random.multinomial 函数将此场景再现出来就是以下代码:

>>> np.random.multinomial(20, [1/6.]*6, size=1)
array([[4, 1, 7, 5, 2, 1]])

以上的代码和结果输出表示的是:我们得到数字是1的次数是4次,得到2的次数是1词,得到3的次数是7次,以此类推。

返回值的数字表示样本值的次数,而对应数字的数组索引位置表示的是实际的值

如果我们循环来对同一场景做多次样本实验呢?

for i in range(4):
    a =np.random.multinomial(20, [1/6.]*6, size=1)
    print(a)

#[[2 6 3 5 3 1]]
#[[4 4 1 3 4 4]]
#[[0 4 3 5 2 6]]
#[[4 3 2 5 3 3]]

我们可以看出每次的实验结果都是不一样的。这也体现了实际情况下有限实现取样的随机性。

多次取样在官方实验的代码demo是通过参数来控制的。

>>> np.random.multinomial(20, [1/6.]*6, size=2)
array([[3, 4, 3, 3, 4, 3],
       [2, 4, 3, 4, 0, 7]])

size在这个地方跟我们通过循环多次实验是一样的效果。