我正在尝试为大于x的值绘制此正态分布的积分,定义为
在哪里
在python中定义两个函数
import scipy.integrate as integrate
import numpy as np
def gaussian(x, mu, sig):
norm = 1/np.sqrt(2*np.pi*sig*sig)
return norm * np.exp(-np.power(x - mu, 2.) / (2. * sig*sig))
def gaussianGreater(x, mu, sig):
Integrand = lambda x: gaussian(x, mu, sig)
return integrate.quad(Integrand,-np.Inf, x)[0]
现在,我的问题在于在gaussianGreater
通过分布函数评估函数时,函数的积分范围。在评估时,会发生这种情况。
y = gaussianGreater(subdist_1, mu_1, sig_1 )
xd = np.argsort(subdist_1)
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111)
ax.plot(subdist_1[xd] ,y[xd] )
ValueError: The truth value of an array with more than one element
is ambiguous. Use a.any() or a.all()
我尝试将错误的上限更改为给我的错误,但这将返回错误 'float' object has no attribute '__getitem__'
应用for循环也不起作用
[gaussianGreater(x, mu_1, sig_1 ) for x in subdist_1]
TypeError: only integer arrays with one element can be converted to an index
我该如何解决这个问题?
您可以将scipy.stats.norm的生存函数直接用于1-F(x):
import scipy.stats as ss
x = np.linspace(-3, 3, 100)
y = ss.norm.sf(x) # you can pass its mean and std. dev. as well
plt.plot(x, y)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句