numpy.random.multinomial#

random.multinomial(n, pvals, size=None)#

从多项分布中抽取样本.

多项分布是二项分布的多元推广.进行一个具有 p 个可能结果的实验.这种实验的一个例子是掷骰子,结果可以是 1 到 6.从分布中抽取的每个样本代表 n 个这样的实验.它的值, X_i = [X_0, X_1, ..., X_p] ,表示结果是 i 的次数.

备注

新代码应该使用 multinomial 方法,该方法属于 Generator 实例;请参阅 快速入门 .

警告

此函数默认为 C-long dtype,在 Windows 上为 32 位,在 64 位平台上为 64 位(在 32 位平台上为 32 位).自 NumPy 2.0 起,NumPy 的默认整数在 32 位平台上为 32 位,在 64 位平台上为 64 位.

参数:
nint

实验次数.

pvals浮点数序列,长度为 p

p 种不同结果中每一种结果的概率.这些概率之和必须为 1(但是,始终假定最后一个元素用于解释剩余概率,只要 sum(pvals[:-1]) <= 1 ).

sizeint 或 int 元组,可选

输出形状. 如果给定形状,例如 (m, n, k) ,则抽取 m * n * k 个样本. 默认为 None,在这种情况下,返回单个值.

返回:
outndarray

如果提供了 size,则返回指定大小的抽取样本; 如果未提供,则返回 (N,) .

也就是说,每个条目 out[i,j,...,:] 都是从分布中抽取的 N 维值.

参见

random.Generator.multinomial

新代码应该使用它.

示例

掷骰子 20 次:

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

结果 1 出现了 4 次,2 出现了 1 次,等等.

现在,掷骰子 20 次,然后再掷 20 次:

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

对于第一次运行,我们掷出 3 次 1,4 次 2,等等.对于第二次,我们掷出 2 次 1,4 次 2,等等.

加权骰子更有可能停留在数字 6 上:

>>> np.random.multinomial(100, [1/7.]*5 + [2/7.])
array([11, 16, 14, 17, 16, 26]) # random

概率输入应该被归一化.作为一个实现细节,最后一个条目的值会被忽略,并假定占据任何剩余的概率质量,但是不应该依赖于此.如果一个有偏的硬币在一面上的权重是另一面的两倍,应该像这样采样:

>>> np.random.multinomial(100, [1.0 / 3, 2.0 / 3])  # RIGHT
array([38, 62]) # random

而不是像这样:

>>> np.random.multinomial(100, [1.0, 2.0])  # WRONG
Traceback (most recent call last):
ValueError: pvals < 0, pvals > 1 or pvals contains NaNs