티스토리 뷰
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]'파이썬 > Numpy' 카테고리의 다른 글
| [Numpy] numpy 요소별 연산, 브로드 캐스팅(Broadcasting) (7) | 2025.08.13 |
|---|---|
| [Numpy] ndarray 형태 바꾸기 (reshape() ,flatten(), copy(), view()) (3) | 2025.08.08 |
| [Numpy] ndarray의 axis 축 개념 (2) | 2025.08.05 |
| [Numpy] Numpy 배열 ndarray 속성 (4) | 2025.08.04 |
| [Numpy] Numpy의 개요 및 설치 (0) | 2024.07.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- *
- 파이썬
- ndarray
- ML
- 숏코딩
- 클래스 총 정리
- ML Process
- 앤드류응
- 손실함수
- Sort
- 머신러닝
- 강의노트 정리
- 강화학습
- 비용함수
- **kwargs
- Andrew Ng
- 로지스틱 회귀
- NumPy
- 딥러닝
- python
- 경사하강법
- ML 종류
- ML 프로세스
- sorted
- *args
- Action spaces
- cnn
- 백준
- **
- baekjoon
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함
