Python 计算并绘制[-1,5]区间内的理论正态分布N(2,1)

Python 计算并绘制[-1,5]区间内的理论正态分布N(2,1),python,numpy,probability,normal-distribution,probability-density,Python,Numpy,Probability,Normal Distribution,Probability Density,我的任务是计算并绘制[-1,5]区间内的正态分布N(2,1) 以下是我尝试过的: vec = np.random.norm(2, 1, 7); ND = stats.norm(2, 1).pdf(vec) x = np.arange(1, 6, 1) plt.figure() plt.plot(x, 'r') plt.hist(ND) plt.show() 正如你可能已经发现的,这并没有给我我想要的结果 我一辈子都搞不清楚这件事。请注意,我是一名学生,最近才开始用Python编写代码 我被要求

我的任务是计算并绘制[-1,5]区间内的正态分布N(2,1)

以下是我尝试过的:

vec = np.random.norm(2, 1, 7);
ND = stats.norm(2, 1).pdf(vec)
x = np.arange(1, 6, 1)
plt.figure()
plt.plot(x, 'r')
plt.hist(ND)
plt.show()
正如你可能已经发现的,这并没有给我我想要的结果

我一辈子都搞不清楚这件事。请注意,我是一名学生,最近才开始用Python编写代码

我被要求生成np.random.normal范围为-1到5的随机数。然而,考虑到时间间隔从-1开始,我还不知道如何才能做到这一点

第二,我被要求使用scipy.stats中的函数norm.pdf,但我不了解有关此函数的文档()

最后,我必须绘制结果。

指定N(2,1)分布就是说你想要一个均值为2、方差(或标准偏差)为1的正态分布。在scipy术语中,平均值等于位置,标准偏差等于刻度

要使用matplotlib绘制pdf,请在间隔[-1,5]上选择足够的点以生成视觉平滑的图形。这就是
linspace
的目的。对于这些点,您可以使用
norm.pdf
计算其pdf

from scipy.stats import norm
from matplotlib import pyplot as plt
import numpy as np

x = np.linspace(-1, 5, 100, endpoint=True)
pdf = [norm.pdf(_, loc=2, scale=1) for _ in x]

plt.plot(x, pdf, 'b-')
plt.show()
在这里,我创建了一个大小为10的示例。我知道
norm.rvs
会在整个实线上产生偏差;因此,为了获得期望间隔的偏差,我只需忽略该间隔之外的偏差。每次调用“norm.rvs”都会生成一个长度为1的numpy“array”。为了获得一个好的结果,我只选择该数组中的第一项,并将其附加到整个样本中(如果它在所需的时间间隔内)

样本大小=10
样本=[]

而len(样本)欢迎来到SO。不幸的是,这不是一个讨论论坛或教程服务。请花点时间阅读该页上的内容和其他链接。@wwii好的,你介意建议一个论坛来帮助我解决这个问题吗?当尝试使用新工具时,手册是一个很好的开始。在文档方面投入一些时间,一路上进行试验。
sample_size = 10
sample = []
while len(sample)<sample_size:
    while True:
        deviate = norm.rvs(loc=2, scale=1, size=1)[0]
        if -1<=deviate<=5:
            break
    sample.append(deviate)
print (sample)