Python 单个函数返回inf值时两个gamma函数的估计比率

Python 单个函数返回inf值时两个gamma函数的估计比率,python,scipy,inf,gamma,Python,Scipy,Inf,Gamma,我在估计两个伽马函数的比值。gamma(x)和gamma(y)的估计值都非常大(>10^300),但两者的比率应该相当小 from scipy.special import gamma gamma(x) / gamma(y) 不幸的是,gamma(x)太大,scipy返回一个inf值。有没有办法阻止这种情况,提高阈值,或者计算这个比率 谢谢假设x和y是真的且为正,您可以使用以下标识: a / b = e^(ln(a) - ln(b)) 我建议使用gmpy2进行任意精度的计算。它有gmpy2.

我在估计两个伽马函数的比值。
gamma(x)
gamma(y)
的估计值都非常大(>10^300),但两者的比率应该相当小

from scipy.special import gamma
gamma(x) / gamma(y)
不幸的是,
gamma(x)
太大,scipy返回一个
inf
值。有没有办法阻止这种情况,提高阈值,或者计算这个比率


谢谢

假设x和y是真的且为正,您可以使用以下标识:

a / b = e^(ln(a) - ln(b))

我建议使用
gmpy2
进行任意精度的计算。它有
gmpy2.lgama
,它返回伽马函数的对数,您可以使用
gmpy2.exp
将对数形式转换为所需的比率。

是x,y实数还是复数?
scipy.special
gammaln
(),因此
exp(gammaln(a)-gammaln(b))
应该可以工作。@WarrenWeckesser No,
scipy.special
的数据类型是
double
,因此它无法处理OP所需的大数字。对,这就是使用
gammaln
的要点。OP说伽马(x)大于1e300,但没有说要大多少。假设
x
是425,而
y
是420。
gamma(x)
gamma(y)
都大大大于1e300(远远超过最大64位浮点值),但是
exp(gammaln(x)-gammaln(y))
很容易使用64位浮点计算
1.3883e13
。64位浮点数的使用范围取决于
x
y
的实际大小,以及
gamma(x)/gamma(y)
的比率有多大。@WarrenWeckesser哦,我假设
x
大约是10^300。误读。如果您的
x
y
适合双人,请随意使用scipy功能。