我正在尝试计算upper incomplete gamma function中定义的this post。如果我使用
from scipy.special import gamma,gammainc
from numpy import linspace
a = 0
z = (2+3j)*np.linspace(0,10)
gamma(a)*(1-gammainc(a,z))
其中z
是一个复数向量,我得到一个错误
TypeError: ufunc 'gammainc' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
是否有其他函数可以进行计算?当我尝试使用WolframAlpha的Gamma
函数来执行此操作时似乎没有问题。
答案 0 :(得分:2)
当SciPy不足以实现棘手的特殊功能时,mpmath通常可以解决。比较
>>> mpmath.gammainc(0, 2+3j)
mpc(real='-0.024826207944199364', imag='0.020316674911044622')
,与Wolfram Alpha中的相同。
使用Python编写,它比SciPy慢;它也没有向量化。因此,使用您的数据就可以了
import mpmath
result = np.array([mpmath.gammainc(w) for w in z[1:]], dtype=np.complex)
请注意,我避免传递0
作为参数(这是一个极点)。 mpmath.gammainc
的返回类型是其自己的mpc
对象类型,但是可以如上所述将其转换回NumPy。