使用mpmath.nsum()和scipy.special.gamma()时如何修复TypeError?

时间:2019-01-23 00:45:48

标签: python scipy mpmath

我正在用Python实现一些数学公式,当我使用mpmath.nsum()

时出现以下错误
  

TypeError:输入类型不支持ufunc'gamma',并且根据强制转换规则“ safe”,不能将输入安全地强制转换为任何受支持的类型

主文件

import math
from mpmath import nsum
H_n = - nsum(lambda n: P_n(a,b,c,n)*math.log(P_n(a,b,c,n)), [0, math.inf])

功能文件

import math
from scipy.special import gamma, hyp1f1
def P_n(a,b,c,n):
    P = ((gamma(b)*gamma(a+n))/(gamma(a)*gamma(b+n)))*(hyp1f1(a+n,b+n,-c))
    return P

当我在下面使用for循环时,我会得到想要的答案。

sum = 0.0
for n in range(100):
    sum += rna.P_n(a,b,c,n)*math.log(rna.P_n(a,b,c,n))

请帮忙吗? (注意:我是Python的绝对入门者,所以我不知道如何解决此问题)

1 个答案:

答案 0 :(得分:0)

Scipy.special.gamma仅适用于整数或浮点参数,不适用于mpmath的无限精度值。使用mpmath.gamma或避免使用mpmath并手动进行求和,直到达到较大的有限截止为止。