Как исправить ошибку TypeError при использовании mpmath.nsum () и scipy.special.gamma ()? - PullRequest
0 голосов
/ 23 января 2019

Я реализую некоторые математические формулы в 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 голосов
/ 25 января 2019

Scipy.special.gamma работает только для целочисленных аргументов или аргументов с плавающей запятой, но не для значений mpmath с бесконечной точностью. Либо используйте mpmath.gamma, либо избегайте mpmath и делайте суммирование вручную до большого конечного среза.

...