일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- Mac
- SQL
- Github
- Apache
- 파이썬
- google apps script
- PostgreSQL
- Redshift
- GIT
- array
- Google Spreadsheet
- numpy
- string
- dataframe
- Python
- Excel
- django
- PANDAS
- matplotlib
- math
- gas
- Google Excel
- c#
- Kotlin
- PySpark
- Java
- Tkinter
- hive
- list
- Today
- Total
달나라 노트
Python numpy : random.rand, random.randint, random.randn (난수 생성 모듈, numpy 랜덤 숫자 생성, 표준 정규분포 난수 생성) 본문
Python numpy : random.rand, random.randint, random.randn (난수 생성 모듈, numpy 랜덤 숫자 생성, 표준 정규분포 난수 생성)
CosmosProject 2022. 1. 2. 03:35
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개를 가진 array를 2세트 생성하라는 의미이기 때문입니다.
아래 예시를 보면 이해가 좀 더 쉬울겁니다.
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개 생성합니다.
'Python > Python numpy' 카테고리의 다른 글
Python numpy : sqrt (제곱근, numpy 제곱근, numpy 루트) (0) | 2022.01.22 |
---|---|
Python numpy : log, log2, log10 (python log 함수, python ln, 자연로그, numpy.log, numpy.log2, numpy.log10) (0) | 2022.01.15 |
Python numpy : min, max (np.min, np.max, 최소값, 최대값) (0) | 2021.12.29 |
Python numpy : tolist (array를 list로 변환. array list) (0) | 2021.12.29 |
Python numpy : copy (array 복사본 생성하기) (0) | 2021.12.29 |