一、stats.norm.pdf(a)
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
# 设定均值和标准差
mu = 0
sigma = 1
# 生成从-5到5的等差数列作为x轴值
x = np.linspace(-5, 5, num=1000)
# 接收x轴和均值、标准差,输出y轴值
y = norm.pdf(x, mu, sigma)
# 绘制概率密度函数曲线
plt.plot(x, y)
# 添加x轴和y轴描述
plt.xlabel('x')
plt.ylabel('pdf(x)')
# 添加标题
plt.title('Normal PDF')
# 显示图像
plt.show()
stats.norm.pdf(a)是scipy库中给定一组参数的情况下,计算正态分布函数的概率密度函数的函数。其中,a表示x轴的取值范围,也可以通过numpy生成等差数列来实现。
在以上代码中,我们设定均值为0、标准差为1,将x轴的取值范围设定在-5到5之间,生成num个等差数列作为x轴的取值。同时,将x轴的取值、均值、标准差作为参数传入stats.norm.pdf函数中,得到模拟数据的y轴值,绘制出正常分布概率密度函数的曲线。通过plt.show()方法,将图像显示出来。
二、stats.norm.pdf python
import numpy as np
from scipy.stats import norm
# 设定均值和标准差
mu = 0
sigma = 1
# 生成从-5到5的等差数列作为x轴值
x = np.linspace(-5, 5, num=1000)
# 接收x轴和均值、标准差,输出y轴值
y = norm.pdf(x, mu, sigma)
# 将x轴和y轴的值打印出来
print("x轴的取值:\n", x)
print("y轴的取值:\n", y)
stats.norm.pdf也可以用来计算某个数值点上正态分布的概率密度函数值。通过将此方法应用于给定的x轴点,我们可以计算出每个点的y值,从而得到正态分布概率密度函数的曲线。
以上代码中,我们同样设定均值为0、标准差为1,再生成等差数列作为x轴的取值范围。将x轴每个点的取值、均值、标准差作为参数,得到模拟数据的y轴值。同时,我们使用print()函数将模拟数据打印出来。
三、stats.norm.pdf的参数选取
在stats.norm.pdf中,除了x轴的取值范围、均值、标准差之外,还有许多其他参数可以选择。下面列举常见的参数:
1. loc:均值参数,即正态分布的中心
2. scale:标准差参数
3. size:随机变量数量,可以用于模拟样本分布
4. random_state:确定随机数生成器的种子
以下是一个综合使用以上参数的示例代码:
import numpy as np
from scipy.stats import norm
# 设定均值和标准差
mu = 0
sigma = 1
# 生成100个符合正态分布的随机数
samples = norm.rvs(loc=mu, scale=sigma, size=100, random_state=42)
# 计算概率密度函数曲线
x = np.linspace(-5, 5, num=1000)
pdf = norm.pdf(x)
# 绘制概率密度函数曲线和样本分布图
import seaborn as sns
sns.distplot(samples, bins=10, kde=False, norm_hist=True)
plt.plot(x, pdf)
# 添加x轴和y轴描述
plt.xlabel('x')
plt.ylabel('pdf(x)')
# 添加标题
plt.title('Normal PDF and Samples')
# 显示图像
plt.show()
以上代码中,首先使用norm.rvs()方法生成100个符合标准正态分布的随机数,并将均值、标准差、随机数数量、随机数种子作为参数传入方法中。然后,使用np.linspace()方法生成x轴的等差数列,将这些数传入stats.norm.pdf()方法中,得到模拟数据的y轴值。
接下来,我们使用seaborn库的distplot()方法来绘制样本的实际分布情况,同时使用plot()方法将正态分布概率密度函数的曲线绘制在上面。注意,在绘制样本分布图时,我们将kde参数设为False,norm_hist参数设为True,这是为了将样本分布显示为直方图,并将概率密度标准化为1。
最后,添加轴标签和标题,使用plt.show()方法显示图像。