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]])
对于第一次,我们掷出 1 的次数为 3,掷出 2 的次数为 4,等等.对于第二次,我们掷出 1 的次数为 2,掷出 2 的次数为 4,等等.
作弊的骰子更有可能掷出数字 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