달나라 노트

Python numpy : random.rand, random.randint, random.randn (난수 생성 모듈, numpy 랜덤 숫자 생성, 표준 정규분포 난수 생성) 본문

Python/Python numpy

Python numpy : random.rand, random.randint, random.randn (난수 생성 모듈, numpy 랜덤 숫자 생성, 표준 정규분포 난수 생성)

CosmosProject 2022. 1. 2. 03:35
728x90
반응형

 

 

 

 

 

Python numpy library에는 난수(랜덤한 숫자)를 생성하는 method들이 있는데 어떤 것들이 있고 어떻게 사용할 수 있는지 알아봅시다.

 

 

- numpy.random.rand()

rand method는 0 이상 1 미만의 랜덤한 실수를 생성합니다.

 

import numpy as np

test_value = np.random.rand()
print(test_value)


-- Result
0.11999006968888681

 

 

 

import numpy as np

test_value = np.random.rand(3)
print(test_value)


-- Result
[0.56929945 0.43654139 0.87778867]

위 예시처럼 rand method에 숫자를 넣어주면 넣은 숫자의 길이만큼 랜덤한 숫자를 생성하고 그것을 1차원 array로 반환해줍니다.

 

 

 

 

import numpy as np

test_value = np.random.rand(3, 4)
print(test_value)


-- Result
[[0.05555989 0.63505685 0.36887796 0.64219683]
 [0.65361048 0.99546424 0.81229446 0.77809041]
 [0.73097116 0.28809419 0.6344211  0.30775399]]

또한 위처럼 콤마로 2개의 숫자를 전달하면 3행, 4열의 2차원 array를 생성하고 각 위치에 대한 값을 random하게 생성해서 채워줍니다.

 

 

 

import numpy as np

test_value = np.random.rand(3, 4, 5)
print(test_value)


-- Result
[[[0.26758996 0.95980634 0.50554095 0.06891669 0.69822398]
  [0.94054763 0.08585781 0.42660082 0.70620349 0.51604462]
  [0.41597376 0.82889974 0.5830088  0.09580829 0.42402785]
  [0.51646281 0.90876102 0.88183303 0.44743445 0.14454797]]

 [[0.0909516  0.24687484 0.32514145 0.25410396 0.96051095]
  [0.06948782 0.84581168 0.58448059 0.11160112 0.53396762]
  [0.88084114 0.71859496 0.11191562 0.90165779 0.94797485]
  [0.69033783 0.49764572 0.00936529 0.60176843 0.57654666]]

 [[0.4915768  0.73936017 0.90912611 0.8554641  0.6142998 ]
  [0.31723779 0.66997889 0.74059722 0.51694656 0.88987578]
  [0.63808982 0.16416488 0.60612256 0.82981574 0.45036353]
  [0.60354252 0.89730896 0.99114311 0.22817364 0.06158281]]]

3차원 array도 가능합니다.

 

 

 


 

 

 

- numpy.random.randint(min, max)

randint method는 min 이상, max 미만인 범위에 있는 정수 중 랜덤한 숫자를 return해줍니다.

 

 

import numpy as np

test_value = np.random.randint(1, 10)
print(test_value)


-- Result
6

 

 

import numpy as np

test_value = np.random.randint(1, 10, size=5)
print(test_value)


-- Result
[5 4 5 7 3]

위처럼 size 옵션을 명시해주면 size 옵션에 명시된 길이인 1차원 array를 생성해줍니다.

그리고 생성된 array에 들어갈 값은 1 이상, 10 미만인 범위에 존재하는 정수 중 랜덤하게 골라진 정수들로 채워집니다.

 

- test_value = np.random.randint(1, 10, size=(5,))

위처럼 1차원 array를 return할 때 size를 길이가 1인 tuple로 명시해도 결과는 동일합니다.

 

 

 

 

import numpy as np

test_value = np.random.randint(1, 10, size=(3, 4))
print(test_value)


-- Result
[[3 6 7 3]
 [6 5 1 3]
 [1 6 1 7]]

size 옵션을 tuple의 형태로 명시해주면 다차원 array도 생성할 수 있습니다.

 

 

 

 

 


 

 

 

 

- numpy.random.randn(n)

randn method는 표준 정규분포 확률을 따르는 난수를 return해줍니다.

표준정규분포란 평균을 0, 표준편차를 1인 정규분포를 의미합니다.

 

 

import numpy as np

arr_base = np.random.randn(5)
print(arr_base)


-- Result
[ 1.29329825  0.33103355 -0.1273907   0.07171837 -1.20395902]

사용법은 위와 같습니다.

randn method는 인자로 숫자를 받는데 받은 숫자의 길이를 가진 array를 생성하고, 표준정규분포에 따른 난수를 생성해서 그 요소로 채워줍니다.

 

 

 

 

그러면 randn method로 추출된 숫자들이 진짜 정규분포를 따를까요?

한번 histogram을 그려봅시다.

(matplotlib hist method 관련 내용 = https://cosmosproject.tistory.com/446)

 

import numpy as np
import matplotlib.pyplot as plt

arr_base = np.random.randn(100000)

plt.hist(arr_base, bins=100)
plt.show()

그래프를 보면 표준정규분포와 상당히 흡사한 것을 알 수 있습니다.

 

 

 

 

 

import numpy as np

arr_base = np.random.randn(2, 3)
print(arr_base)


-- Result
[[ 1.09167256  0.30550194 -1.29596849]
 [ 0.12180157  0.60044377  0.22317249]]

이런식으로 콤마로 구분하여 paramter를 전달하면 다차원의 array도 생성할 수 있습니다.

위 예시를 보면 3개의 요소를 가진 array가 2개 담긴 2차원 array가 return되었습니다.

 

이것은 randn(2, 3)의 의미가 정규분포를 만족하는 숫자 3개를 가진 array2세트 생성하라는 의미이기 때문입니다.

 

 

 

아래 예시를 보면 이해가 좀 더 쉬울겁니다.

import numpy as np

arr_base = np.random.randn(5, 3)
print(arr_base)


-- Result
[[-1.77974642 -0.56085618 -0.72899114]
 [-0.19350346 -1.4159823   0.34210025]
 [ 0.88649359 -0.06568965  2.10911684]
 [ 0.73002903 -0.24523545 -0.98142325]
 [ 1.82575381 -0.55200388  0.55717074]]

randn(5, 3)의 의미는 다음과 같습니다.

정규분포를 따르는 랜덤한 3개의 숫자를 가진 array를 생성합니다.

그리고 이러한 array를 총 5개 생성합니다.

 

 

 

 

 

 

728x90
반응형
Comments