计算并绘制 [-1, 5] 区间内的理论正态分布 N(2, 1)
Calculate and plot the theoretical normal distribution N(2, 1) in the interval of [-1, 5]
我一直在给任务计算和绘制 [-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,但我不理解有关此函数的文档 (https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html)
最后我要绘制结果。
指定一个 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'。为了获得好的结果,我 select 只是该数组中的第一项并将其附加到整个样本(如果它在所需的间隔内)。
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)
我一直在给任务计算和绘制 [-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,但我不理解有关此函数的文档 (https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html)
最后我要绘制结果。
指定一个 N(2,1) 分布就是说您想要一个均值为 2 且方差(或标准差)为 1 的正态分布。在 scipy 术语中,均值等同于位置,和比例标准差。
要使用 matplotlib 绘制 pdf 绘图,您需要在区间 [-1, 5] 上选择足够多的点来制作视觉上平滑的图形。这就是linspace
的目的。对于这些点中的每一个,您使用 norm.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'。为了获得好的结果,我 select 只是该数组中的第一项并将其附加到整个样本(如果它在所需的间隔内)。
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)