我正在尝试使用scipy.stats.norm绘制高斯PDF,但我只想绘制介于某些参数(btwn 0和20,000)之间的y值。我不想更改PDF的形状,只需限制绘图的值即可。
我尝试了以下代码的几种变体,但始终会遇到(可理解的)错误:
ValueError: The truth value of an array with more than one element is ambiguous use a.any() or a.all()
这很有意义,但是我不确定如何获得想要的结果。如果我尝试将y索引为y(i),则与a.any()类似,绘图时会出现尺寸不匹配的情况。
欢迎使用任何pythonic解决方案-我仍然很新,所以也许我忽略了一些显而易见的事情。
x = np.linspace(0,20000,1000)
y = norm.pdf(x, loc=3600, scale=2160)
if y in range(0,10000):
y = z
plt.plot(x,z)
plt.savefig('continPDF')
答案 0 :(得分:2)
如果您只想用这些参数绘制pdf,从0
的最小输入值到10000
的最大输入值,则只需执行以下操作:
y = norm.pdf(range(0,10001), loc=3600, scale=2160)
plt.plot(y)
编辑:基于文档中的示例,@ inon-peled发表以下评论,请参见下面的scipy.stats.truncnorm
演示:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.truncnorm.html。
为简单起见,我从您的scale参数中提取了
from scipy.stats import truncnorm
loc = 3600
a, b = -1000, 1000
x = np.linspace(truncnorm.ppf(0, a, b, loc=loc),
truncnorm.ppf(1, a, b, loc=loc), 10000)
for i in [a,b,0]:
plt.axvline(loc+i, color='black', linestyle='--', alpha=0.5, lw=1)
annotations = ['loc+a','loc+b','loc']
for i,j in zip(annotations,[a,b,0]):
plt.annotate(I, (loc+j,0.0001830), fontsize=8, ha='center')
plt.plot(x, truncnorm.pdf(x, a, b, loc=loc, scale=scale), 'r')