728x90
반응형
오늘은 numpy로 난수를 생성하는 random 함수에 대해 포스팅하겠다.
np.random.rand()
0 이상 1 미만의 범위 내에 주어진 argument 만큼 난수를 생성한다.
import numpy as np
np.random.rand(3)
# array([0.60407304, 0.97595625, 0.3530597 ])
np.random.rand(3,3)
"""
array([[0.95799066, 0.43424117, 0.59480775],
[0.93778055, 0.97494792, 0.81196245],
[0.15744564, 0.05079325, 0.562474 ]])
"""
argument가 1개로 들어가면 1-d 형태로 난수를 생성하며 2개를 입력하면 2-d 형태로 난수를 생성한다.
np.random.randint()
주어진 argument에 따라 난수 생성 범위가 정해진다. 2개의 argument가 주어진다면 첫 번째가 최솟값이며 두 번째가 최댓값으로 범위가 설정된다. 만약 1개의 argument가 주어진다면 최솟값의 default가 0이므로 0 이상 argument 미만 범위의 난수가 생성된다.
np.random.randint(5, size=3)
# array([1, 4, 0])
np.random.randint(5,10, size=(3,3))
"""
array([[7, 8, 5],
[7, 7, 8],
[5, 6, 6]])
"""
np.random.normal()
정규분포를 따라 난수를 생성시켜주는 함수이다. 첫번째 argument는 평균이며 두 번째 argument는 표준편차의 제곱근으로 입력이 된다.
np.random.normal(0,1,3) # 평균 0, 표준편차 1 정규분포 (표준정규분포)
# array([2.07966068, 1.31838192, 0.06320669])
np.random.normal(3,2,3) # 평균 3, 표준편차 4 정규분포
# array([1.45656667, 2.15905746, 3.85229432])
np.random.normal(3,2,(3,3)) # 평균 3, 표준편차 4 정규분포
"""
array([[ 6.47674027, 3.81290819, 3.64421214],
[ 2.89696456, 2.59159807, 6.95869687],
[-0.23860013, 0.77207117, 2.10511856]])
"""
마지막 argument는 사이즈이다.
np.random.randn(), np.random.standard_normal()
이 두가지 함수는 모두 표준정규분포를 따르는 난수들을 생성한다. 다만 차이점은 np.random.standard_normal() 함수는 입력은 tuple로 입력을 받는다.
# 표준정규분포 난수 생성 (평균 0, 표준 편차 1)
np.random.randn(3)
# array([ 0.74135627, -0.79536493, 0.24305304])
np.random.randn(3,3)
"""
array([[ 0.98238544, -0.64256871, 0.10750515],
[ 0.1737801 , 1.36333232, -0.5860791 ],
[ 0.27674028, -0.61979036, 0.06931072]])
"""
np.random.standard_normal(3)
# array([-0.22529523, -1.4254539 , -0.2659656 ])
np.random.standard_normal((3,3))
"""
array([[-1.37319796, -0.46548084, -0.05282945],
[-1.32685494, -0.42176808, -0.83722265],
[ 1.82402059, 0.78627155, -0.06513189]])
"""
np.random.seed()
난수를 생성할 때 고유 시드를 제공하는 함수이다. 시드를 동일하게 선언하고 난수를 생성한다면 동일한 난수들이 생성된다.
for i in range(10):
np.random.seed(123)
print(np.random.rand(3))
"""
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
"""
다음과 같이 random 함수에는 다양한 조건의 난수들을 생성할 수 있도록 한다. 특히 np.random.seed()는 데이터 증강을 할 때 데이터 원본과 라벨을 동시에 동일한 변화를 주고 싶을 때 유용하게 사용이 될 수 있으니 눈여겨보면 좋다.
728x90
반응형
'Python > Numpy' 카테고리의 다른 글
[Python] np.concatenate() - 넘파이 어레이 합치기 (0) | 2022.09.12 |
---|---|
[Python] np.transpose(), np.swapaxes() - 차원 및 축 변경하기 (0) | 2022.09.12 |
[Python] np.newaxis, np.expand_dims(), np.squeeze() - 차원 및 축 조절하기 (0) | 2022.09.12 |
[Python] numpy - np.linspace와 np.arange의 차이점 (0) | 2022.09.09 |
[Python] np.where() - 조건에 맞는 인덱스 찾기 (0) | 2022.08.30 |
댓글