평균과 분산이 주어지면 정규 분포를 그리는 간단한 함수 호출이 있습니까?
답변
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import math
mu = 0
variance = 1
sigma = math.sqrt(variance)
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
plt.plot(x, stats.norm.pdf(x, mu, sigma))
plt.show()
답변
나는 한 번의 호출로 모든 것을 수행하는 기능이 있다고 생각하지 않습니다. 그러나에서 가우스 확률 밀도 함수를 찾을 수 있습니다 scipy.stats
.
그래서 제가 생각 해낼 수있는 가장 간단한 방법은 :
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
# Plot between -10 and 10 with .001 steps.
x_axis = np.arange(-10, 10, 0.001)
# Mean = 0, SD = 2.
plt.plot(x_axis, norm.pdf(x_axis,0,2))
plt.show()
출처 :
답변
대신 seaborn을 사용하십시오 .1000 값 중 mean = 5 std = 3 인 seaborn의 distplot을 사용하고 있습니다.
value = np.random.normal(loc=5,scale=3,size=1000)
sns.distplot(value)
정규 분포 곡선을 얻을 수 있습니다.
답변
Unutbu 대답이 맞습니다. 그러나 우리의 평균이 0보다 크거나 작을 수 있기 때문에 여전히 이것을 변경하고 싶습니다.
x = np.linspace(-3 * sigma, 3 * sigma, 100)
이에 :
x = np.linspace(-3 * sigma + mean, 3 * sigma + mean, 100)
답변
단계별 접근 방식을 선호하는 경우 다음과 같은 솔루션을 고려할 수 있습니다.
import numpy as np
import matplotlib.pyplot as plt
mean = 0; std = 1; variance = np.square(std)
x = np.arange(-5,5,.01)
f = np.exp(-np.square(x-mean)/2*variance)/(np.sqrt(2*np.pi*variance))
plt.plot(x,f)
plt.ylabel('gaussian distribution')
plt.show()
답변
나는 방금 이것으로 돌아 왔고 MatplotlibDeprecationWarning: scipy.stats.norm.pdf
위의 예제를 시도 할 때 matplotlib.mlab이 오류 메시지를 주었으므로 scipy를 설치해야했습니다 . 이제 샘플은 다음과 같습니다.
%matplotlib inline
import math
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats
mu = 0
variance = 1
sigma = math.sqrt(variance)
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
plt.plot(x, scipy.stats.norm.pdf(x, mu, sigma))
plt.show()