分布函数的 ValueError shape <= 0

ValueError shape <= 0 for distribution function

我需要完成一个看起来像这样的分布函数 python:

−∞< x <∞, P(x)dx= ((1+x^2/n)^-(n+1)/2) * Γ(n+1/2)/Γ(n/2)*(nπ)** 1/2 dx, n=1.

所以我这样试过:

from numpy import *
from scipy import stats
from scipy.special import gammaln
from pylab import *

def studentstPDF(x,n=1):
"""
Call:
   d = studentstPDF(x,n)
Input argument:
   x: float (array)
   n: float, default = 1.0
Output argument:
   p: float
Examples:
   In [1]: studentstPDF(1,1)
   Out[1]: 0.1591549
"""
p = (1+((x**2)/n))**((-n+1)/2) * gamma((n+1)/2) / gamma(n/2) * (n*math.pi)**1/2
p[x<inf] = 0.0
p[x>-inf] = 0.0
return(p)

但现在我收到错误 'ValueError: shape <= 0'

这是什么意思?我的功能哪里出错了?

In [16]:
studentstPDF(1,1)
Traceback (most recent call last):

File "<ipython-input-16-ddd6d9df823d>", line 1, in <module>
studentstPDF(1,1)

File "/Users/Veysel/Downloads/Exercise4-2/exercise4.py", line 122, in studentstPDF
p = (1+((x**2)/n))**((-n+1)/2) * gamma((n+1)/2) / gamma(n/2) * (n*math.pi)**1/2

File "mtrand.pyx", line 1871, in mtrand.RandomState.gamma (numpy/random/mtrand/mtrand.c:13491)

ValueError: shape <= 0

您来自 scipy.specialgamma 函数很可能被另一个性质不同的 gamma 函数覆盖,可能是您大量导入的随机变量函数。改为这样导入:

from scipy.special import gamma as Gamma

然后像这样写出你的表情:

p = (1+((x**2)/n))**((-n+1)/2) * Gamma((n+1)/2) / Gamma(n/2) * (n*math.pi)**1/2

如果您绝对必须以相同的方式导入,请使用 scipy.special.gamma 代替您当前的 gamma 调用和 import scipy.

您的错误本身是由于尝试对形状不同的操作数使用乘法运算符 * 而导致的。