Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python从正态分布生成随机麦克斯韦分布_Python_Python 3.x_Numpy_Random_Scipy - Fatal编程技术网

Python从正态分布生成随机麦克斯韦分布

Python从正态分布生成随机麦克斯韦分布,python,python-3.x,numpy,random,scipy,Python,Python 3.x,Numpy,Random,Scipy,我有一组遵循正态分布的数据,在其中我可以拟合直方图并获得平均值和西格玛 为了举例,我将通过生成一个随机正态分布来近似它,如下所示: from scipy.stats import maxwell import math import random import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm from scipy.optimize import curve_fit from IPyt

我有一组遵循正态分布的数据,在其中我可以拟合直方图并获得平均值和西格玛

为了举例,我将通过生成一个随机正态分布来近似它,如下所示:

from scipy.stats import maxwell
import math
import random
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.optimize import curve_fit
from IPython import embed # put embed() where you want to stop
import matplotlib.ticker as ticker

    data = random.gauss(307, 16)
    N, bins, patches = plt.hist(data, bins=40, density=True, alpha=0.5, histtype='bar', ec='black')
    mu, std = norm.fit(data)
    xmin, xmax = plt.xlim()
    x = np.linspace(xmin, xmax, 100)
    p = norm.pdf(x, mu, std)
    plt.plot(x, p, 'k', linewidth=2, label= r'$\mu$ = '+'{:0.1f}'.format(mu)+r' $\pm$ '+'{:0.1f}'.format(std))
接下来我想做的是从这个“正态”分布生成一个麦克斯韦分布,并能够拟合


我读过网页和其他一些相关问题,但无法从“高斯分布”生成这样的分布并进行拟合。任何帮助都将不胜感激。

好吧,知道每个麦克斯韦都是分子速度绝对值的分布,其中每个分量都是正态分布的,你们可以像下面的代码一样进行采样

import numpy as np
import matplotlib.pyplot as plt

from scipy.stats import maxwell

def maxw(size = None):
    """Generates size samples of maxwell"""
    vx = np.random.normal(size=size)
    vy = np.random.normal(size=size)
    vz = np.random.normal(size=size)
    return np.sqrt(vx*vx + vy*vy + vz*vz)

mdata = maxw(100000)
h, bins = np.histogram(mdata, bins = 101, range=(0.0, 10.0))

x = np.linspace(0.0, 10.0, 100)
rv = maxwell()

fig, ax = plt.subplots(1, 1)

ax.hist(mdata, bins = bins, density=True)
ax.plot(x, rv.pdf(x), 'k-', lw=2, label='Maxwell pdf')
plt.title("Maxwell")
plt.show()
这是采样和Maxwell PDF重叠的图片


能否添加运行代码所需的所有相关
import
语句?我们或许可以很好地猜测它们是什么,但我们不应该这样做。:)“…但无法从“高斯分布”生成这样的分布并进行拟合。”你到底尝试了什么,出了什么问题?你有没有收到错误,或者只是意外的结果?谢谢你的建议,我已经添加了导入的包。我试过做ax.plot(数据,maxwell.pdf(数据),'r-',lw=5,alpha=0.6,label='maxwell-pdf')和ax.plot(数据,maxwell.pdf(x),'r-',lw=5,alpha=0.6,label='maxwell-pdf'),其中x应该是高斯输出。在第一种情况下,它根本不适合,在第二种情况下,它给了我一个错误。仍然不确定什么是正确的方法<编码>随机。高斯(307,16)生成一个样本。我不认为将正态分布(或麦克斯韦分布)拟合到单个点有什么意义<代码>标准拟合(数据)将准确返回该点作为平均值(即位置),0作为标准偏差(即刻度)。这真的是您正在使用的完整代码吗?