Plot of one distribution

我对编程还很陌生,所以请耐心等待. 我正在try 模拟不同的概率分布,我想给每个概率分布拟合一个高斯分布,然后找出产生的高斯分布的标准差,然后比较这些STD DEVE.

我不知道如何告诉PYTHON找到离我的曲线最近的高斯曲线,所以如果有任何帮助,我将不胜感激.

到目前为止,这是我的代码,我try 使用curve_fit,但我真的不知道如何使用,所以我go 掉了它,我不确定如何定义最佳拟合的高斯.

import numpy as np
import matplotlib.pyplot as plt
from scipy import linalg, special, optimize, stats
from numpy import math
from scipy.optimize import curve_fit

q = 4000
qA = np.arange(0.000001,q+1,1.0)
qB = q - qA
N = 2000
NA = 1000
NB = N - NA

ASA = (qA + NA -1)*np.log(qA + NA -1)-(qA*np.log(qA)) - (NA -1)*np.log(NA -1) #sterling approximate of SA/kb

ASB = (qB + NB -1)*np.log(qB + NB -1)-(qB*np.log(qB)) - (NB -1)*np.log(NB -1) #sterling approximate of SB/kb



TATA_list=[]
for i in range(1,len(qA)-1):
    
TATE = (qA[i+1] - qA[i-1]) / (ASA[i+1] - ASA[i-1])
TATA_list.append(TATE)                      

TBTA_list=[]
for i in range(1,len(qA)-1):
    
TBTE = (qB[i+1] - qB[i-1]) / (ASB[i+1] - ASB[i-1])
TBTA_list.append(TBTE)                      

AStot = (q + N -1)*np.log(q + N -1)-(q*np.log(q))-(N-1)*np.log(N-1)
Paprox = np.exp(ASA + ASB - AStot)
SUMPX = sum(Paprox[:-1])
NormPAprox = Paprox/SUMPX

plt.plot(qA/q, NormPAprox)



推荐答案

我首先定义要拟合的曲线,提供参数的初步猜测.然后我运行拟合并打印结果.

enter image description here

#Define the curve
def gaussian(x, mean, sigma, amplitude):
    return amplitude * np.exp(-(x - mean)**2 / (2 * sigma**2))

#Drop NaNs
is_nan = np.isnan(NormPAprox)
is_valid = ~is_nan
print('Dropping', is_nan.sum(), 'NaNs')
x_vals = (qA / q)[is_valid]
y_vals = NormPAprox[is_valid]

#Initial guess for each parameter
# mean: x location of the peak
# std: std of x
# amplitude: amplitude of the peak
initial_guess = [x_vals[np.argmax(y_vals)], x_vals.std(), y_vals.max()]

#Get the fitted params
fit_params, fit_covariance = curve_fit(gaussian, x_vals, y_vals, p0=initial_guess)
print('Fitted mean, std, amplitude are:', fit_params.round(3))
print(' Variance of each estimate:', fit_covariance.diagonal().round(3))

将数据和适配度可视化(放大到峰值):

#Plot original and estimated
plt.plot(x_vals, y_vals, linewidth=8, color='darkgreen', label='data')
plt.plot(x_vals, gaussian(x_vals, *fit_params), color='tab:orange', label='fitted')
plt.xlim(0.45, 0.55)
plt.title('Data and fit')
plt.legend()
plt.xlabel('qA/q')
plt.ylabel('NormPAprox')
plt.gcf().set_size_inches(5, 3)

Python相关问答推荐

在有限数量的唯一字母的长字符串中,找到包含重复不超过k次的所有唯一字母的最长子字符串

两极:滚动组,起始指数由不同列设置

try 使用tensorFlow.keras.models时optree Import错误

如何判断LazyFrame是否为空?

为什么我的(工作)代码(生成交互式情节)在将其放入函数中时不再工作?

了解shuffle在NP.random.Generator.choice()中的作用

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

有什么方法可以避免使用许多if陈述

在Python中为变量的缺失值创建虚拟值

如何根据条件在多指标框架上进行groupby

用gekko解决的ADE方程系统突然不再工作,错误消息异常:@错误:模型文件未找到.& &

在内部列表上滚动窗口

将DF中的名称与另一DF拆分并匹配并返回匹配的公司

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

如何使用scipy的curve_fit与约束,其中拟合的曲线总是在观测值之下?

Pandas Loc Select 到NaN和值列表

python中的解释会在后台调用函数吗?

如何更新pandas DataFrame上列标题的de值?

pandas:对多级列框架的列进行排序/重新排序

matplotlib图中的复杂箭头形状