分布函数的 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.special
的 gamma
函数很可能被另一个性质不同的 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
.
您的错误本身是由于尝试对形状不同的操作数使用乘法运算符 *
而导致的。
我需要完成一个看起来像这样的分布函数 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.special
的 gamma
函数很可能被另一个性质不同的 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
.
您的错误本身是由于尝试对形状不同的操作数使用乘法运算符 *
而导致的。