我在计算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。

10-06 01:56