ValueError shape< = 0表示分布函数

时间:2015-03-23 15:52:05

标签: python distribution

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

-∞&LT; 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&lt; = 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

1 个答案:

答案 0 :(得分:0)

来自gamma的{​​{1}}函数最有可能被另一种性质的scipy.special函数覆盖,也许是来自大量导入的随机变量函数。像这样导入:

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的结果。