我需要完成一个看起来像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
答案 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
的结果。