scipy.stats.multinomial#
- scipy.stats.multinomial = <scipy.stats._multivariate.multinomial_gen object>[源代码]#
多项式随机变量。
- 参数:
- n整数
试验次数
- parray_like
试验落入每个类别的概率;总和应为1
- 种子{None, int, np.random.RandomState, np.random.Generator}, 可选
用于绘制随机变量。如果 seed 是 None,则使用 RandomState 单例。如果 seed 是整数,则使用新的
RandomState
实例,并以 seed 为种子。如果 seed 已经是RandomState
或Generator
实例,则使用该对象。默认值为 None。
方法
pmf(x, n, p)
概率质量函数。
logpmf(x, n, p)
概率质量函数的对数。
rvs(n, p, size=1, random_state=None)
从多项分布中抽取随机样本。
熵(n, p)
计算多项分布的熵。
cov(n, p)
计算多项分布的协方差矩阵。
参见
scipy.stats.binom
二项分布。
numpy.random.Generator.multinomial
从多项分布中采样。
scipy.stats.multivariate_hypergeom
多变量超几何分布。
注释
n 应该是一个非负整数。p 的每个元素应该在区间 \([0,1]\) 内,并且这些元素的和应为 1。如果它们的和不等于 1,p 数组的最后一个元素将不被使用,并被前面元素剩余的概率所替代。
multinomial
的概率质量函数为\[f(x) = \frac{n!}{x_1! \cdots x_k!} p_1^{x_1} \cdots p_k^{x_k},\]支持在 \(x=(x_1, \ldots, x_k)\) 上,其中每个 \(x_i\) 是非负整数且它们的和为 \(n\)。
Added in version 0.19.0.
示例
>>> from scipy.stats import multinomial >>> rv = multinomial(8, [0.3, 0.2, 0.5]) >>> rv.pmf([1, 3, 4]) 0.042000000000000072
对于 \(k=2\) 的多项分布与相应的二项分布相同(尽管存在微小的数值差异):
>>> from scipy.stats import binom >>> multinomial.pmf([3, 4], n=7, p=[0.4, 0.6]) 0.29030399999999973 >>> binom.pmf(3, 7, 0.4) 0.29030400000000012
函数
pmf
,logpmf
,entropy
, 和cov
支持广播,按照约定,向量参数(x
和p
)被解释为如果沿最后一个轴的每一行是一个单独的对象。例如:>>> multinomial.pmf([[3, 4], [3, 5]], n=[7, 8], p=[.3, .7]) array([0.2268945, 0.25412184])
这里,
x.shape == (2, 2)
,n.shape == (2,)
,和p.shape == (2,)
,但根据上述规则,它们的行为就像x
中的行[3, 4]
和[3, 5]
以及p
中的[.3, .7]
是一个单一对象,并且就像我们有x.shape = (2,)
,n.shape = (2,)
,和p.shape = ()
。要获得不进行广播的单个元素,我们会这样做:>>> multinomial.pmf([3, 4], n=7, p=[.3, .7]) 0.2268945 >>> multinomial.pmf([3, 5], 8, p=[.3, .7]) 0.25412184
这种广播机制同样适用于
cov
,其中输出对象是大小为p.shape[-1]
的方阵。例如:>>> multinomial.cov([4, 5], [[.3, .7], [.4, .6]]) array([[[ 0.84, -0.84], [-0.84, 0.84]], [[ 1.2 , -1.2 ], [-1.2 , 1.2 ]]])
在这个例子中,
n.shape == (2,)
和p.shape == (2, 2)
,根据上述规则,这些会被广播为p.shape == (2,)
。因此,结果的形状也应该是(2,)
,但由于每个输出都是一个 \(2 imes 2\) 矩阵,实际上结果的形状是(2, 2, 2)
,其中result[0]
等于multinomial.cov(n=4, p=[.3, .7])
,而result[1]
等于multinomial.cov(n=5, p=[.4, .6])
。或者,可以调用对象(作为函数)来固定 n 和 p 参数,返回一个“冻结”的多项式随机变量:
>>> rv = multinomial(n=7, p=[.3, .7]) >>> # Frozen object with the same methods but holding the given >>> # degrees of freedom and scale fixed.