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 数据类型,在 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
它 4 次落在 1 上,1 次落在 2 上,依此类推。
现在,掷骰子 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