numpy.random.RandomState.multinomial#

方法

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

从多项分布中抽取样本.

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

备注

新代码应使用 Generator 实例的 multinomial 方法;请参阅 快速开始.

警告

此函数默认为 C-long 数据类型,在 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