添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

python中不完整的gamma函数?

10 人关注

scipy.special.gammainc 的第一个参数不能取负值。有没有其他可以在python中实现的方法?我可以做一个手动集成,但我想知道是否有好的替代品已经存在。

Correct result: 1 - Gamma[-1,1] = 0.85
Use Scipy: scipy.special.gammainc(-1, 1) = 0
    
python
scipy
nye17
nye17
发布于 2012-05-11
3 个回答
DSM
DSM
发布于 2021-10-29
已采纳
0 人赞同

我通常都会伸手去拿 姆帕斯数学 只要我需要特殊的功能,而且我不太关心性能。 (虽然它在许多情况下的性能反正是相当好的)。

>>> import mpmath
>>> mpmath.gammainc(-1,1)
mpf('0.14849550677592205')
>>> 1-mpmath.gammainc(-1,1)
mpf('0.85150449322407795')
>>> mpmath.mp.dps = 50 # arbitrary precision!
>>> 1-mpmath.gammainc(-1,1)
mpf('0.85150449322407795208164000529866078158523616237514084')
    
谢谢,我在网上简单搜索了一下,但没有找到独立的解决方案。我想这是我为单一功能安装额外软件包的少数场合之一;-)
mpf "代表什么?
JoeZuntz
JoeZuntz
发布于 2021-10-29
0 人赞同

I just had the same issue and ended up using the recurrence relations for the function when a<0. http://en.wikipedia.org/wiki/Incomplete_gamma_function#Properties

还请注意,scipy函数gammainc和gammaincc给出了正则化的形式Gamma(a,x)/Gamma(a)。

Christian Herenz
Christian Herenz
发布于 2021-10-29
0 人赞同

在2021年仍然是一个问题,而且他们在scipy中仍然没有改进这一点。 尤其令人沮丧的是, scipy 甚至没有提供不规则的上下不完全Gamma函数的版本。 我最后还使用了 mpmath ,它使用了自己的数据类型(这里的 mpf 为mpmath浮动的--它支持任意精度)。 为了给上下不完全Gamma函数快速制作一些东西,使其能与 numpy 数组一起使用,并且表现得像人们从评估这些积分所期望的那样,我想出了以下方法。

import numpy as np
from mpmath import gammainc
In both functinos below a is a float and z is a numpy.array.
def gammainc_up(a,z):
    return np.asarray([gammainc(a, zi, regularized=False)
                       for zi in z]).astype(float)