我在计算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
函数来实现这个功能时,似乎没有问题。 最佳答案
当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。