본문 바로가기
[Library] - Numpy/API

# 2. np.random

by Bebsae 2022. 1. 17.

이번 포스트에서는 numpy 패키지중 랜덤으로 배열을 생성하는 메소드들에 대해 알아볼 것이다.

 

np.random.rand

이 메소드의 인자는 정수들을 여러개 나열할 수 있다. (가변인자) 이 정수들은 생성될 배열의 차원이 된다. 각 요소들은 균일분포에서 0~1 사이의 값들로 이루어져 있다.

import numpy as np

r = np.random.rand(4, 3, 3)
print(r.shape)
print(r)

>>
(4, 3, 3)
[[[0.24380173 0.55585745 0.68894391]
  [0.73212786 0.32187644 0.6370955 ]
  [0.19283783 0.32313824 0.54533787]]

 [[0.10738025 0.06398702 0.82363365]
  [0.29439519 0.84482247 0.10289052]
  [0.65700758 0.35399047 0.87736559]]

 [[0.94158704 0.71311728 0.26285666]
  [0.2546409  0.63586641 0.33387162]
  [0.0812239  0.77018538 0.79362564]]

 [[0.64800052 0.65812561 0.62733075]
  [0.73382516 0.30908954 0.8734064 ]
  [0.34635335 0.82458229 0.16205249]]]

 

np.random.randn

randn 메소드는 rand 메소드와 같은 인자가 주어지며, 역할 또한 같다. 하지만 rand 뒤에 붙은 n은 normaliz의 약자로, 표준정규분포를 의미한다. 즉, 배열의 각 요소들은 평균이 0, 표준편차가 1인 정규분포를 따르는 값들로 이루어진다.

import numpy as np

r = np.random.randn(4, 3, 3)
print(r.shape)
print(r)

>>
(4, 3, 3)
[[[ 1.22265899  0.05676203  0.52628294]
  [-0.35160274  0.18329556 -0.52264174]
  [ 0.35088699  0.6780065   1.06934204]]

 [[-1.47815674  0.49717694  0.7118528 ]
  [ 0.46483632 -1.51538977  1.52931297]
  [ 1.29220383  0.29304783  2.4012369 ]]

 [[-0.50593327 -1.24176065  0.38946177]
  [ 0.85934587  0.38254319 -0.57461112]
  [ 0.35418024  0.39079134 -0.57681324]]

 [[-1.31030476 -0.95656839 -0.30523736]
  [ 0.86773947  1.09388927 -0.30307506]
  [-1.76326376  0.27382012 -0.4822414 ]]]

 

np.random.randint

randint의 인자는 총 4가지로, low, high, size, dtype이다. low와 high 사이의 값들중 이산균등분포(discrete uniform distribution)에 따라 size에 해당하는 차원의 배열을 생성한다.

import numpy as np

r = np.random.randint(10, 30, (3, 2))
print(r.shape)
print(r)

>>
(3, 2)
[[29 11]
 [18 16]
 [14 11]]

 

np.random.choice

choice는 모집단으로부터 표본을 추출(sampling)하기 위한 메소드이다. choice 메소드의 인자는 a, size, replace, p 4가지로 구성된다. a는 1차원 (1-Dimensional) 모집단을, size는 모집단으로부터 추출한 표본의 차원을 의미한다. replace는 복원추출여부 (기본값은 True이기 때문에 복원추출을 하므로 같은 값이 나올 수 있다.) p는 각 모집단의 원소별 추출될 확률(probability)를 의미한다.

import numpy as np

r = np.random.randint(10, 30, (10,))
print(r.shape)
print(r)

# r은 모집단으로 반드시 1차원 배열로 주어져야 한다.
c = np.random.choice(r, (2, 2), False)
print(c.shape)
print(c)

>>
(10,)
[29 28 12 25 24 22 29 15 17 10]

(2, 2)
[[22 15]
 [25 17]]

 

각 원소별 추출될 확률을 알고있다면 p인자를 다음과 같이 전달할 수 있다. 단, p는 각 사건별 확률들을 의미하기 때문에 모든 원소의 합이 1.0이 되어야 한다.

import numpy as np

r = np.random.randint(10, 30, (10,))
print(r.shape)
print(r)

p = np.array([0.2, 0.1, 0, 0.1, 0.1, 0.2, 0.1, 0.1, 0.1, 0])
c = np.random.choice(a=r, size=(2, 2), replace=False, p=p)
print(c.shape)
print(c)

>>
(10,)
[15 12 19 17 18 16 16 20 10 21]

(2, 2)
[[20 12]
 [16 15]]

 

np.random.shuffle

배열의 원소들을 무작위로 섞는 메소드이다. 인자로는 요소를 섞을 메소드를 전달하면 된다. 단, mutable 메소드이기 때문에 리턴값이 존재하는게 아닌, 원본 배열을 변경시키므로 주의해야 한다. 다차원의 배열의 경우, 첫번째 axis를 기준으로 섞는다. 고로 아래의 코드에서 arr_2d를 보면 알겠지만, 행에 대한 순서만 뒤바뀌고 열에 대한 순서는 뒤바뀌지 않는다.

import numpy as np

arr_1d = np.random.rand(10)
print(arr_1d)
np.random.shuffle(arr_1d)
print(arr_1d)

arr_2d = np.random.rand(10, 4)
print(arr_2d)
np.random.shuffle(arr_2d)
print(arr_2d)

>>
[0.34776543 0.83740759 0.19647254 0.59862433 0.7619661  0.00626874
 0.25468143 0.40265564 0.31533947 0.73946724]
[0.31533947 0.40265564 0.34776543 0.73946724 0.7619661  0.25468143
 0.19647254 0.00626874 0.83740759 0.59862433]
 
 [[0.30367344 0.19118284 0.58846125 0.95819161]
 [0.48306073 0.20288219 0.15202119 0.87286118]
 [0.74826308 0.94474121 0.709091   0.04779432]
 [0.25324383 0.15514302 0.15458373 0.15608368]
 [0.76695255 0.30640361 0.53329762 0.28424841]
 [0.68039318 0.96946212 0.88914883 0.77502352]
 [0.33953381 0.44091022 0.87266575 0.22149501]
 [0.22125052 0.41270158 0.21103919 0.86233811]
 [0.89062146 0.78908648 0.3197469  0.93314661]
 [0.9140763  0.59611933 0.00248547 0.64391027]]
[[0.22125052 0.41270158 0.21103919 0.86233811]
 [0.25324383 0.15514302 0.15458373 0.15608368]
 [0.74826308 0.94474121 0.709091   0.04779432]
 [0.68039318 0.96946212 0.88914883 0.77502352]
 [0.76695255 0.30640361 0.53329762 0.28424841]
 [0.9140763  0.59611933 0.00248547 0.64391027]
 [0.89062146 0.78908648 0.3197469  0.93314661]
 [0.33953381 0.44091022 0.87266575 0.22149501]
 [0.30367344 0.19118284 0.58846125 0.95819161]
 [0.48306073 0.20288219 0.15202119 0.87286118]]

'[Library] - Numpy > API' 카테고리의 다른 글

# 6. np.meshgrid  (0) 2022.03.17

댓글