티스토리 뷰

numpy에서 제공하는 random 모듈을 이용하면 임의의 수로 N차원 배열을 만들 수 있다. 난수 생성과 n차원 배열 생성에 대해서 알아보고, seed 값을 통해 난수 생성을 제어하는 것까지 알아보자.

 

 

🔎np.random.rand()

[0,1)의 범위에서 균등하게 난수를 생성한다.

반환 결과는 n차원 배열이며, 인자로는 배열의 형태(shape)를 받는다.

arr = np.random.rand(5)
print(arr) #[0.59953651 0.85265585 0.57330519 0.85266434 0.21060973]

arr = np.random.rand(2,3)
print(arr) #[[0.69141021 0.80572982 0.79157604]
           # [0.77683598 0.63636264 0.52295062]]
[0,1) 의미
  수학에서 [0, 1)는 0 이상 1 미만의 구간을 의미합니다.
  0은 포함하고 1은 포함하지 않습니다
  즉, 생성되는 값은 항상 0 ≤ 값 < 1의 범위를 갖는다.

 

🔎np.random.randint()

[low, high)의 범위에서 정수를 생성한다.

반환 결과는 n차원 배열이며, 인자로는 (low, high, size)를 받는다. 

 

  • low: 최소값 (포함)
  • high: 최대값 (제외)
  • size: 배열 크기
arr = np.random.randint(5) #0<=x<5 사이 정수 1개
print(arr) #4

arr = np.random.randint(2, size=4) #0<=x<2 사이 정수 1개
print(arr) #[1 0 1 0]

arr = np.random.randint(2,10, size=4) #2<=x<10 사이 정수 4개
print(arr) #[5 4 2 5]

arr = np.random.randint(2,10, size=(2,3)) #2<=x<10 사이 정수 (2,3) 배열
print(arr) #[[8 4 8]
           # [4 3 8]]

 

🔎np.random.randn()

표준 정규분포(평균=0, 표준편차=1)를 따르는 난수를 생성한다.

인자는 배열의 형태만 지정하면 된다.

arr = np.random.randn(5)
print(arr) #[-0.27912922 -2.02485934  2.26194857 -0.44000607 -0.38889532]

arr = np.random.randn(2,3)
print(arr) #[[-0.42714988 -0.12024773  1.30916154]
           # [ 0.59784098 -0.4314809  -0.95579212]]
정규분포?
 "변수 x가 정규분포를 따른다"는 \(X \backsim N(m,\sigma^{2})\)와 같이 표현된다.
  여기서, m: 평균, \(\sigma^{2}\) : 분산, \(\sigma\): 표준편차를 의미한다.

 

🔎np.random.normal()

일반적인 정규분포에서 난수를 생성한다.

인자는 (loc, scale, size)를 받는다.

 

  • loc: 평균(μ)
  • scale: 표준편차(σ)
  • size: 배열 크기
arr = np.random.normal(0,1,2) #정규분포 N(0,1)에서 임의의 숫자 2개 생성 #(평균 0, 표준편차 1)
print(arr) #[0.86192865 0.56609602]

arr = np.random.normal(1.5, 3.0, 5) #정규분포 N(1.5, 3.0^2)에서 임의의 숫자 5개 생성
print(arr) #[-1.63498467 -0.78194607 -1.22164146 -1.80304591  3.19507106]

arr = np.random.normal(1.5, 3.0, (2,3)) #정규분포 N(1.5, 3.0^2)에서 임의의 (2,3) 배열 생성
print(arr) #[[-1.18628622  4.63182679  0.95230595]
           # [ 6.31490365  2.11225898  6.73290845]]

 

🔎np.random.seed()

random 모듈을 통해 생성되는 난수는 사실 진짜 난수(true random)가 아니다. 이는 특정 시작 숫자(seed)를 기반으로 한 알고리즘에 의해 만들어지는 예측 가능한 수열이다. 즉, 마치 무작위처럼 보이지만, 같은 시드 값을 사용하면 항상 동일한 난수열이 생성된다.

이러한 시드를 설정함으로써 난수 생성을 제어할 수 있으며, 재현 가능한(random but repeatable) 결과를 얻을 수 있다. 이는 실험이나 모델의 일관성을 위해 매우 중요하다.

np.random.seed(2) #시드값을 2로 고정
arr = np.random.randint(1, 10, 10)
print(arr) #[9 9 7 3 9 8 3 2 6 5]


np.random.seed(200) #시드값을 200으로 변경
arr2 = np.random.randint(1, 10, 10)
print(arr2) #[1 5 8 7 9 2 8 4 2 8]


np.random.seed(2) #시드값을 2로 재변경
arr3 = np.random.randint(1, 10, 10)
print(arr3) #[9 9 7 3 9 8 3 2 6 5]
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함