Python 中高斯概率密度函数图的直方图
Histogram on Gaussian probability density function graph in Python
我想用我的高斯概率分布函数创建一个直方图(来自伪随机数),但是,我不希望直方图超过我的 PDF 上的最大点。到目前为止,这是我的代码:
from math import sqrt, pi, exp
from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt
mu = 0.5
variance = 0.5
sigma = sqrt(variance)
npts = 100
x = np.linspace(norm.ppf(0.01), norm.ppf(0.99), npts)
#plot pdf
plt.plot(x, norm.pdf(x, mu, sigma), lw=3, c='r', label='PDF')
#RNG
y = [-3, -2, -1, 0, -1, -2, -3]
if y < 1./(sigma*sqrt(2*pi))*exp(-(mu**2/2*sigma**2)):
u = sigma * np.random.randn(100) + mu
plt.hist(u, histtype='bar', alpha=0.5)
plt.show()
有谁知道怎么做或有任何线索吗?
下面的代码适用于我的电脑
python 2.7.10
numpy 1.10.1
matplotlib 1.4.3
scipy 0.15.1
但我不确定您如何导入这些函数,您应该post 将引发 ValueError 的代码以便我可以回答您的问题
import numpy as np
from scipy.stats import norm
from math import sqrt, pi, exp
import matplotlib.pyplot as plt
mu = 0.5
variance = 0.5
sigma = sqrt(variance)
npts = 100
x = np.linspace(norm.ppf(0.01), norm.ppf(0.99), npts)
#plot pdf
plt.plot(x, norm.pdf(x, mu, sigma), lw=3, c='r', label='PDF')
#RNG
y = [-3, -2, -1, 0, 1, 2, 3]
if y < 1. / (sigma * sqrt(2 * pi)) * exp(-(mu ** 2 / 2 * sigma ** 2)):
u = np.random.random(loc=mu, scale=sigma, size=100)
plt.hist(u, histtype='bar', alpha=0.5)
plt.show()
对于错误...
来自 if y < 1./(sigma*sqrt(2*pi))*exp(-(mu**2/2*sigma**2)):
数字列表小于数字是什么意思?
他们都?或者其中的任何一个?
取决于任何一种情况,您可以使用 y.all 或 y.any
有几个问题。
首先,您需要使用all(y)
检查列表中的所有值是否满足创建直方图的条件。
其次,要使直方图的大小与图表上的 pdf 相似,您需要使用辅助轴,因为值完全不同。
#plot pdf
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(x, norm.pdf(x, mu, sigma), lw=3, c='r', label='PDF')
#RNG
y = [-3, -2, -1, 0, -1, -2, -3]
if all(y) <= 1. / (sigma * sqrt(2 * pi)) * exp(-(mu ** 2 / 2 * sigma ** 2)):
u = sigma * np.random.randn(100) + mu
ax2.hist(u, histtype='bar', alpha=0.5)
plt.show()
我想用我的高斯概率分布函数创建一个直方图(来自伪随机数),但是,我不希望直方图超过我的 PDF 上的最大点。到目前为止,这是我的代码:
from math import sqrt, pi, exp
from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt
mu = 0.5
variance = 0.5
sigma = sqrt(variance)
npts = 100
x = np.linspace(norm.ppf(0.01), norm.ppf(0.99), npts)
#plot pdf
plt.plot(x, norm.pdf(x, mu, sigma), lw=3, c='r', label='PDF')
#RNG
y = [-3, -2, -1, 0, -1, -2, -3]
if y < 1./(sigma*sqrt(2*pi))*exp(-(mu**2/2*sigma**2)):
u = sigma * np.random.randn(100) + mu
plt.hist(u, histtype='bar', alpha=0.5)
plt.show()
有谁知道怎么做或有任何线索吗?
下面的代码适用于我的电脑
python 2.7.10
numpy 1.10.1
matplotlib 1.4.3
scipy 0.15.1
但我不确定您如何导入这些函数,您应该post 将引发 ValueError 的代码以便我可以回答您的问题
import numpy as np
from scipy.stats import norm
from math import sqrt, pi, exp
import matplotlib.pyplot as plt
mu = 0.5
variance = 0.5
sigma = sqrt(variance)
npts = 100
x = np.linspace(norm.ppf(0.01), norm.ppf(0.99), npts)
#plot pdf
plt.plot(x, norm.pdf(x, mu, sigma), lw=3, c='r', label='PDF')
#RNG
y = [-3, -2, -1, 0, 1, 2, 3]
if y < 1. / (sigma * sqrt(2 * pi)) * exp(-(mu ** 2 / 2 * sigma ** 2)):
u = np.random.random(loc=mu, scale=sigma, size=100)
plt.hist(u, histtype='bar', alpha=0.5)
plt.show()
对于错误...
来自 if y < 1./(sigma*sqrt(2*pi))*exp(-(mu**2/2*sigma**2)):
数字列表小于数字是什么意思?
他们都?或者其中的任何一个?
取决于任何一种情况,您可以使用 y.all 或 y.any
有几个问题。
首先,您需要使用all(y)
检查列表中的所有值是否满足创建直方图的条件。
其次,要使直方图的大小与图表上的 pdf 相似,您需要使用辅助轴,因为值完全不同。
#plot pdf
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(x, norm.pdf(x, mu, sigma), lw=3, c='r', label='PDF')
#RNG
y = [-3, -2, -1, 0, -1, -2, -3]
if all(y) <= 1. / (sigma * sqrt(2 * pi)) * exp(-(mu ** 2 / 2 * sigma ** 2)):
u = sigma * np.random.randn(100) + mu
ax2.hist(u, histtype='bar', alpha=0.5)
plt.show()