scipy.special.betainc#
- scipy.special.betainc(a, b, x, out=None) = <ufunc 'betainc'>#
正则化不完全贝塔函数。
计算正则化不完全贝塔函数,定义为 [1]
\[I_x(a, b) = \frac{\Gamma(a+b)}{\Gamma(a)\Gamma(b)} \int_0^x t^{a-1}(1-t)^{b-1}dt,\]其中 \(0 \leq x \leq 1\)。
此函数是贝塔分布的累积分布函数;其值域为 [0, 1]。
- 参数:
- a, barray_like
正的实值参数
- xarray_like
实值,使得 \(0 \leq x \leq 1\),积分上限
- outndarray, optional
可选的输出数组,用于存储函数值
- 返回:
- 标量或 ndarray
正则化不完全贝塔函数的值
另请参见
beta
贝塔函数
betaincinv
正则化不完全贝塔函数的逆函数
betaincc
正则化不完全贝塔函数的补函数
scipy.stats.beta
贝塔分布
注释
此函数名称中的“正则化”一词指的是函数通过公式中所示的伽马函数项进行缩放。当未限定为“正则化”时,“不完全贝塔函数”通常仅指积分表达式,不包含伽马项。可以使用
scipy.special
中的beta
函数,通过将betainc(a, b, x)
的结果乘以beta(a, b)
来获得此“非正则化”不完全贝塔函数。betainc(a, b, x)
被视为单变量 x 的两参数函数族,而不是三变量函数。这仅影响极限情况a = 0
、b = 0
、a = inf
、b = inf
。通常
\[\lim_{(a, b) \rightarrow (a_0, b_0)} \mathrm{betainc}(a, b, x)\]被视为
x
的逐点极限。因此,例如,对于b > 0
,betainc(0, b, 0)
等于0
,尽管在考虑同时极限(a, x) -> (0+, 0+)
时它将是不确定的。此函数封装了 Boost Math C++ 库 [2] 中的
ibeta
例程。betainc
除了 NumPy 之外,还实验性支持兼容 Python 数组 API 标准的后端。请考虑通过设置环境变量SCIPY_ARRAY_API=1
并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端和设备(或其他功能)组合。库
CPU
GPU
NumPy
✅
不适用
CuPy
不适用
✅
PyTorch
✅
⛔
JAX
✅
✅
Dask
✅
不适用
有关更多信息,请参阅 对数组 API 标准的支持。
参考文献
[1]NIST 数学函数数字库 https://dlmf.nist.gov/8.17
[2]The Boost Developers。“Boost C++ Libraries”。https://boost.ac.cn/。
示例
令 \(B(a, b)\) 为
beta
函数。>>> import scipy.special as sc
用
gamma
表示的系数等于 \(1/B(a, b)\)。此外,当 \(x=1\) 时,积分等于 \(B(a, b)\)。因此,对于任何 \(a, b\),\(I_{x=1}(a, b) = 1\)。>>> sc.betainc(0.2, 3.5, 1.0) 1.0
它满足 \(I_x(a, b) = x^a F(a, 1-b, a+1, x)/ (aB(a, b))\),其中 \(F\) 是超几何函数
hyp2f1
>>> a, b, x = 1.4, 3.1, 0.5 >>> x**a * sc.hyp2f1(a, 1 - b, a + 1, x)/(a * sc.beta(a, b)) 0.8148904036225295 >>> sc.betainc(a, b, x) 0.8148904036225296
此函数满足关系 \(I_x(a, b) = 1 - I_{1-x}(b, a)\)
>>> sc.betainc(2.2, 3.1, 0.4) 0.49339638807619446 >>> 1 - sc.betainc(3.1, 2.2, 1 - 0.4) 0.49339638807619446