Hello Computer Vision

np.random.choice 공부해보기 본문

딥러닝

np.random.choice 공부해보기

지웅쓰 2023. 8. 21. 18:03

이번에 semi supervised learning의 대표 모델인 FixMatch 코드를 공부하는 도중 np.random.choice 함수를 만났다. 이전에 본적 있지만 그냥 넘어갔는데 확실히 공부해보려고 한다. https://numpy.org/doc/stable/reference/random/generated/numpy.random.choice.html

 

numpy.random.choice — NumPy v1.25 Manual

If a is an int and less than zero, if a or p are not 1-dimensional, if a is an array-like of size 0, if p is not a vector of probabilities, if a and p have different lengths, or if replace=False and the sample size is greater than the population size

numpy.org

 

해당 함수는 랜덤 샘플링을 할 때 사용되는 함수이다. 복원추출, 비복원추출은 파라미터 설정으로 가능하다.

우선 예시를 통해 먼저 보자.

lists = np.array([1,2,7,8,9])
for i in range(5): 
  print(np.random.choice(lists, 3, False))
[9 7 2]
[7 8 1]
[1 2 7]
[1 9 2]
[7 9 1]

첫번째 파라미터는 list를 받는다. 나는 1,2,7,8,9 가 들어간 리스트를 주었다. 그리고 두번째 파라미터로는 추출할 원소의 개수를 적는다. 나는 3개를 적었다. 그리고 3번째 파라미터는 비복원 추출, 복원추출할지의 여부이다. 기본값은 True이며 복원추출을 하는 것이며  False는 비복원 추출이다.

lists = np.array([1,2,7,8,9])
for i in range(5): 
  print(np.random.choice(lists, 3, True))
[7 2 2]
[2 9 2]
[1 7 1]
[7 7 2]
[9 1 8]

이렇게 세번째 파라미터를 True로 줄 경우 똑같은 원소가 나올 수 있다. 그리고 네번째 파라미터도 있는데 이는 해당 원소들의 추출될 확률을 부여한다.

lists = np.array([1,2,7,8,9])
for i in range(5): 
  print(np.random.choice(lists, 3, True, p = [0.9, 0, 0, 0, 0.1]))
[1 1 1]
[1 1 1]
[1 1 1]
[1 1 1]
[1 1 1]

만약 비복원 추출하는데 남은 원소들의 확률이 0이라면?

ValueError: Fewer non-zero entries in p than size

이러한 에러가 뜬다.

 

그리고 꼭 리스트를 원소를 주지 않고 숫자로도 줄 수 있다. 

for i in range(5): 
  print(np.random.choice(10, 3, False))
[8 0 5]
[0 4 8]
[5 4 2]
[8 2 3]
[8 5 3]

 

 

가볍게 알아보는 np.random.choice정리 끝!

'딥러닝' 카테고리의 다른 글

비전공생의 SAM(2021) 논문 리뷰  (0) 2023.09.19
torch.topk 함수 공부해보기  (1) 2023.08.22
Test Time Augmentation 알아보기  (0) 2023.07.10
CAM, Grad-CAM 공부해보기  (0) 2023.06.30
GPU연산 DP, DDP 공부해보기  (0) 2023.06.29