我的目标是生成一个具有期望均值和σ的随机二维正态分布,并能够用麦克斯韦分布拟合它。我在StackOverflow中修改了一个code,但是我一直在标题中得到错误。我尝试过使用垃圾箱大小,但很明显,如果垃圾箱不是从0开始,它会不断给我错误:
from scipy.stats import maxwell
import math
import random
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
import matplotlib.ticker as ticker
def maxw(size = None):
"""Generates size samples of maxwell"""
mu, sigma = 307, 16
vx = np.random.normal(mu, sigma, size=size)
vy = np.random.normal(mu, sigma, size=size)
vz = np.random.normal(mu, sigma, size=size)
return np.sqrt(vx*vx + vy*vy + vz*vz)
mdata = maxw(100000)
h, bins = np.histogram(mdata, bins = 101, range=(290.0, 320.0))
x = np.linspace(290.0, 320.0, 100)
rv = maxwell()
fig, ax = plt.subplots(1, 1)
ax.hist(mdata, bins = bins, density=True, color='blue', alpha=0.7, histtype='bar', ec='black')
ax.plot(x, rv.pdf(x), 'k-', lw=2, label='Maxwell pdf')
plt.title("Maxwell")
plt.show()
有什么建议吗
这是因为在没有数据的区域生成直方图:
线路
返回一个全为零的直方图数组:
这是因为分布的正交和(函数的输出)的平均值不是和中每个分布的平均值。它是平均值的正交和(即
np.sqrt(3*307^2) ~ 530
),因此您制作了一个零值直方图您可以通过更改
np.histogram
函数的范围来解决此问题,或者干脆完全删除该范围,然后将x
数组更改为或者,您可以让matplotlib自己的直方图函数处理所有问题:
相关问题 更多 >
编程相关推荐