- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 V_x 和 V_y 方向上的速度数据数组。我使用下面的代码绘制了速度范数的直方图,
plt.hist(V_norm_hist, bins=60, density=True, rwidth=0.95)
现在我还想在此基础上添加瑞利分布曲线,但我无法让它工作。我一直在使用 scipy.stats.rayleigh 尝试不同的组合,但是 scipy homepage并不是很直观,所以我无法让它正常运行......这些线到底是什么意思
mean, var, skew, kurt = rayleigh.stats(moments='mvsk')
和
x = np.linspace(rayleigh.ppf(0.01),rayleigh.ppf(0.99), 100)
ax.plot(x, rayleigh.pdf(x),'r-', lw=5, alpha=0.6, label='rayleigh pdf')
做什么?
最佳答案
您可能需要首先点击 rv_continuous
的链接,其中 rayleigh
被子类化。从那里到 ppf
找出 ppf
是“百分点函数”。 x0 = ppf(0.01)
告诉小于 x0
的所有元素在哪个位置有 accumulated其总“权重”的 1% 以及类似的 x1 = ppf(0.99)
是累积“权重”的 99% 的地方。 np.linspace(x0, x1, 100)
将 x0 到 x1 的空间分成 100 个短间隔。由于连续分布可以是无限的,因此需要这些 x0 和 x1 限制来仅显示感兴趣的区间。
rayleigh.pdf(x)
给出 pdf在 x。因此,指示每个 x 的概率。
rayleigh.stats(moments='mvsk')
其中矩由字母 [‘mvsk’] 组成,定义了要计算的矩:‘m’ = mean , ‘v’ = variance , ‘s’ = (Fisher’s) skew , ‘k’ = (Fisher’s) kurtosis .
要在同一图上绘制直方图和分布,我们需要知道与您的样本相对应的 Raleigh 参数(loc
和 scale
)。此外,pdf 和直方图都需要相同的 x
和相同的 y
。对于x
,我们可以采用直方图箱的限制。对于y
,我们可以放大 pdf,知道 pdf 的总面积应该为 1。并且直方图箱与条目数量成正比。
如果您确实知道 loc
是 0
但不知道 scale
,the wikipedia article给出一个将scale
与样本平均值联系起来的公式:
estimated_rayleigh_scale = samples.mean() / np.sqrt(np.pi / 2)
假设 loc
为 0
且 scale
为 0.08
,代码将如下所示:
from matplotlib import pyplot as plt
import numpy as np
from scipy.stats import rayleigh
N = 1000
# V = np.random.uniform(0, 0.1, 2*N).reshape((N,2))
# V_norm = (np.linalg.norm(V, axis=1))
scale = 0.08
V_norm_hist = scale * np.sqrt( -2* np.log (np.random.uniform(0, 1, N)))
fig, ax = plt.subplots(1, 1)
num_bins = 60
_binvalues, bins, _patches = plt.hist(V_norm_hist, bins=num_bins, density=False, rwidth=1, ec='white', label='Histogram')
x = np.linspace(bins[0], bins[-1], 100)
binwidth = (bins[-1] - bins[0]) / num_bins
scale = V_norm_hist.mean() / np.sqrt(np.pi / 2)
plt.plot(x, rayleigh(loc=0, scale=scale).pdf(x)*len(V_norm_hist)*binwidth, lw=5, alpha=0.6, label=f'Rayleigh pdf (s={scale:.3f})')
plt.legend()
plt.show()
关于python - 直方图上的瑞利分布曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60061020/
我是一名优秀的程序员,十分优秀!