numpy.random.RandomState.multinomial#

方法

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

从多项分布中抽取样本。

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

注意

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

警告

此函数默认为 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