반응형
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
정규분포 생성 및 시각화:
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
베타분포 난수 생성 및 시각화 :
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) 함수 사용
위키피디아 삼각분포 설명:
https://en.wikipedia.org/wiki/Triangular_distribution
삼각분포 난수생성 및 시각화:
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")
반응형
'파이썬 > 난수 생성' 카테고리의 다른 글
파이썬 랜덤(Random) 뽑기 총정리 - 균등분포, 정규분포 등 다양한 통계 분포로 뽑는법 (2) | 2023.12.31 |
---|---|
파이썬 랜덤(Random) 뽑기 - 로그노멀분포, 파레토분포, 웨이블분포 (0) | 2023.12.30 |
파이썬 랜덤(Random) 뽑기 - 지수분포, 감마분포 (3) | 2023.12.30 |
파이썬 랜덤(Random) 뽑기 - 균등분포 (0) | 2023.12.29 |