본문 바로가기

파이썬/난수 생성

파이썬 랜덤(Random) 뽑기 - 정규분포, 베타분포, 삼각분포

반응형

Chat GPT 본문 요약

정규분포: random.gauss(mu, sigma)으로 생성, 평균과 표준편차 조절 가능.
베타분포: random.betavariate(alpha, beta)으로 생성, alpha와 beta 값 조절.
삼각분포: random.triangular(low, high, mode)으로 생성, 최솟값, 최댓값, 최빈값 조절.
분포별 코드 예시와 히스토그램 시각화 제공됨.
자세한 내용은 위키피디아 링크 참조.

 
 
 

정규(Normal)분포 난수 생성 방법

random.gauss(a,b) 함수 사용
 

파이썬 정규분포 난수 생성

위키피디아 정규분포: 
https://en.wikipedia.org/wiki/Normal_distribution

 

Normal distribution - Wikipedia

 

en.wikipedia.org

정규분포 생성 및 시각화:

import random as r
import matplotlib.pyplot as plt

# 정규분포 난수 뽑기 (Normal Distribution, Guassian Distribution)

fig, axs = plt.subplots(nrows=2, ncols=2)

# 1. 평균 0.0, 표준편차 1.0 인 경우 
m = 0.0
s = 1.0
rand = [r.gauss(mu=m,sigma=s) for i in range(100000)] 
plt.subplot(221)
plt.hist(rand, bins=int(100*s))
ax = plt.gca()
ax.set_xlabel("random floating point numbers")
ax.set_xlim([-10,10])
ax.set_ylim([0,8000])
ax.set_ylabel("frequency")
plt.title("guass("+str(m)+","+str(s)+")")
ax.text(x=0.0, y=1000, s="mean="+str(m)+"\n"+"std="+str(s))

# 2. 평균 1.0, 표준편차 1.0 인 경우 
m = 1.0
s = 1.0
rand = [r.gauss(mu=m,sigma=s) for i in range(100000)] 
plt.subplot(222)
plt.hist(rand, bins=int(100*s))
ax = plt.gca()
ax.set_xlabel("random floating point numbers")
ax.set_xlim([-10,10])
ax.set_ylim([0,8000])
ax.set_ylabel("frequency")
plt.title("guass("+str(m)+","+str(s)+")")
ax.text(x=0.0, y=1000, s="mean="+str(m)+"\n"+"std="+str(s))

# 3. 평균 0.0, 표준편차 3.0 인 경우 
m = 0
s = 3.0
rand = [r.gauss(mu=m,sigma=s) for i in range(100000)] 
plt.subplot(223)
plt.hist(rand, bins=int(100*s))
ax = plt.gca()
ax.set_xlabel("random floating point numbers")
ax.set_xlim([-10,10])
ax.set_ylim([0,8000])
ax.set_ylabel("frequency")
plt.title("guass("+str(m)+","+str(s)+")")
ax.text(x=0.0, y=1000, s="mean="+str(m)+"\n"+"std="+str(s))

# 4. 평균 -1.0, 표준편차 0.5 인 경우 
m = -1.0
s = 0.5
rand = [r.gauss(mu=m,sigma=s) for i in range(100000)] 
plt.subplot(224)
plt.hist(rand, bins=int(100*s))
ax = plt.gca()
ax.set_xlabel("random floating point numbers")
ax.set_xlim([-10,10])
ax.set_ylim([0,8000])
ax.set_ylabel("frequency")
plt.title("guass("+str(m)+","+str(s)+")")
ax.text(x=0.0, y=1000, s="mean="+str(m)+"\n"+"std="+str(s))

fig.suptitle("Normal Distribution", fontsize=15)
plt.tight_layout()

 
 

베타(Beta)분포 난수 생성 방법

betavariate(a,b) 함수 사용
 

베타분포로 난수 생성

위키피디아 베타분포 설명:
https://en.wikipedia.org/wiki/Beta_distribution

 

Beta distribution - Wikipedia

 

en.wikipedia.org

 
베타분포 난수 생성 및 시각화 :

import random as r
import matplotlib.pyplot as plt

# 랜덤 실수 뽑기 
# 분포 : 베타분포 (Beta Distribution)

fig, axs = plt.subplots(nrows=2, ncols=2)

# 1. alpha = beta = 0.5 인 경우 
a = 0.5
b = 0.5
rand = [r.betavariate(alpha=a,beta=b) for i in range(100000)] 
plt.subplot(221)
plt.hist(rand, bins=200)
ax = plt.gca()
ax.set_xlabel("random floating point numbers")
ax.set_ylabel("frequency")
plt.title("betavariate("+str(a)+","+str(b)+")")
ax.text(x=0.4, y=1500, s="alpha="+str(a)+"\n"+"beta="+str(b))

# 2. alpha =5, beta =1 인 경우
a = 5
b = 1
rand = [r.betavariate(alpha=a,beta=b) for i in range(100000)] 
plt.subplot(222)
plt.hist(rand, bins=200)
ax = plt.gca()
ax.set_xlabel("random floating point numbers")
ax.set_ylabel("frequency")
plt.title("betavariate("+str(a)+","+str(b)+")")
ax.text(x=0.4, y=1000, s="alpha="+str(a)+"\n"+"beta="+str(b))

# 3. alpha =1, beta =3 인 경우
a = 1
b = 3
rand = [r.betavariate(alpha=a,beta=b) for i in range(100000)] 
plt.subplot(223)
plt.hist(rand, bins=200)
ax = plt.gca()
ax.set_xlabel("random floating point numbers")
ax.set_ylabel("frequency")
plt.title("betavariate("+str(a)+","+str(b)+")")
ax.text(x=0.4, y=1000, s="alpha="+str(a)+"\n"+"beta="+str(b))

# 4. alpha =2, beta =2 인 경우
a = 2
b = 2
rand = [r.betavariate(alpha=a,beta=b) for i in range(100000)] 
plt.subplot(224)
plt.hist(rand, bins=200)
ax = plt.gca()
ax.set_xlabel("random floating point numbers")
ax.set_ylabel("frequency")
plt.title("betavariate("+str(a)+","+str(b)+")")
ax.text(x=0.4, y=300, s="alpha="+str(a)+"\n"+"beta="+str(b))

fig.suptitle("Beta Distribution", fontsize=15)
plt.tight_layout()

 
 

삼각(Triangular)분포 난수 생성

triangular(a,b) 함수 사용
 

10이상 100이하 삼각분포 난수 생성

 
위키피디아 삼각분포 설명:
https://en.wikipedia.org/wiki/Triangular_distribution

 

Triangular distribution - Wikipedia

From Wikipedia, the free encyclopedia Probability distribution Triangular Probability density function Cumulative distribution functionParameters a :   a ∈ ( − ∞ , ∞ ) {\displaystyle a:~a\in (-\infty ,\infty )} b :   a < b {\displaystyle b:~a In

en.wikipedia.org

 
삼각분포 난수생성 및 시각화:

import random as r
import matplotlib.pyplot as plt

# 10 ~ 100 사이의 실수 뽑기 
# 분포 : 삼각분포 (Triangular)
# 범위 : [10,100] -- 경계값 포함
# 간격 : N/A
rand = [r.triangular(10,100,mode=None) for i in range(100000)] 
plt.hist(rand, bins=500)
ax = plt.gca()
xtick = ax.set_xticks([i for i in range(0,101,10)])
ax.set_xlabel("random floating point numbers")
ax.set_ylabel("frequency")
plt.title("triangular(10,100) - floating point numbers")

 
 
 
 

반응형