/ / Хистограма върху графика на функцията за плътност на вероятността на Гауса в Python - питон, хистограма, гаус

Хистограма на гаусовата графика на вероятностите за плътност на вероятностите в Python - python, хистограма, gaussian

Искам да създам хистограма (от псевдослучайнас функцията на Гаусовата вероятностна разпределение, обаче, не искам хистограмата да надвишава максималната точка на моя 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()

Някой знае ли как да направи това или да има някакви улики?

Отговори:

0 за отговор № 1

Има няколко въпроса.

Първо, трябва да използвате 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()

-1 за отговор № 2

Кодът по-долу работи на моя компютър
python 2.7.10 numpy 1.10.1 matplotlib 1.4.3 scipy 0.15.1

но не съм сигурен как ще импортирате тези функции, трябва да публикувате кода, който ще повиши 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