-
[Numpy] 02 난수생성 - 시드값, randint, randomrand, shuffle코린이 유치원/Numpy 2022. 6. 22. 20:32
01 Numpy 난수 생성
난수를 원소로 하는 ndarray 생성
- numpy의 서브패키지인 random 패키지에서 제공하는 함수들
- nnp.random.seed(정수): 시드값 설정
01 np.random.seed(시드값)
- 난수 발생 알고리즘이 사용할 시작값(시드값) 설정 -> 동일한 순서로 난수 발생
- 시드값을 설정하면 항상 일정한 순서의 난수(random value)가 발생
- 랜덤함수는 특정숫자부터 시작하는 일렬의 수열을 만들어 값을 제공하는 함수
- 시작 숫자는 실행할 때 마다 바뀌어서 다른 값들이 나오는데 시드값은 시작 숫자를 고정시켜 같은 값들이 순서대로 제공 된다.
- 매번 실행할 때마다 같은 순서의 임의의 값이 나오도록 할 때 시드값을 설정
02 np.random.rand([axis])
- 0 ~ 1사이의 실수를 리턴
- 축의 크기는 순서대로 나열
np.random.rand() # 0 ~ 1 랜덤 실수 리턴 r = np.random.rand(3,2) # 랜덤 원소의 3 x 2배열 리턴 print(r.shape) # (3,2) r # array([[0.54488318, 0.4236548 ], # [0.64589411, 0.43758721], # [0.891773 , 0.96366276]]) # 리턴 예시
# 0 ~ 1 실수. 균등분포(각각의 값이 나올 확률이 동일) r = np.random.rand(10000) # r의 배열 확인 print(r.shape) # (10000,) # 각 값들과 각 값들이 개수 확인 np.unique(행렬, return_counts = True) x, y = np.unique(r, return_counts = True) # 각 교유값과 교유값의 개수 확인 import matplotlib.pyplot as plt plt.bar(x, y) plt.show() # 0 ~ 1까지 동일한 값 하나도 없음
np.random.rand(1000) 행렬 고유값과 고유값 개수 그래프 개수의 초대값이 1이므로, 모든 값들이 1개씩 있다는 것을 확인 가능
03 np.random.normal(loc = 0.0, scale = 1.0, size = None)
정규분포를 따르는 난수
- loc: 평균
- scale: 표준편차
- loc, scale: 생략시 표준정규 분포 따르는 난수 제공
- 표준정규분포: 평균 - 0/ 표준편차 - 1
- 평균에서 +-1 표준편차 구간에 전체의 68%, +-2 표준편차 구간에 전체중 95%, +-3 표준편차 구간에 전체중 99%
- 평균 10, 표준편차 3
- 1 표준편차 구간 7 ~ 13 (10-3 ~ 10+3) 나올 확률: 68%
- 2 표준편차 구간 4 ~ 16 (10-6 ~ 10+6) 나올 확률: 95%
- 3 표준편차 구간 1 ~ 19 (10-9 ~ 10+9) 나올 확률: 99%
r = np.random.normal(loc = 10, scale = 1, size = 100) # 8 ~ 12 나올 확률 95%, 숫자 100개 리턴 import seaborn as sns sns.kdeplot(r) # 정규분포와 형태의 그래프 나옴 plt.grid(True) # 격자그리기
04 np.random.randint(low, high = None, dtype = 'int32')
임의의 정수를 가지는 배열
- low ~ high 사이의 정수 리턴 high는 포함 안 됨.
- high 생략시 0 ~ low 사이 정수 리턴, low는 포함 안됨
- size: 배열의 크기, 다차원은 튜플로 지정 기본 1개
- dtype: 원소의 타입
벡터 생성
np.random.randint(1, 10) # 1 ~ 10-1 임의의 정수 반환 np.random.randint(4) # 0 ~ 5-1 임의의 정수 반환 r = np.random.randint(1, 10, size = 20) print(r.shape) # (20, ) r
행렬 생성
r = np.random.randint(100, size = (5, 4)) # 5 x 4 행렬 생성 r.shape r
04 np.random.choice(a, size = None, replace = True, p = None)
- 샘플링 메소드
- a: 샘플링 대상, 1차원 배열 또는 정수(정수일 경우 0~ 정수, 마지막 정수 불포함)
- size : 샘플개수
- replace: True - 복원추출(기본), False - 비복원추출
- p: 샘플링할 대상 값들이 추출될 확률 지정한 배열
벡터 생성
np.random.choice([1, 2, 3, 4, 5], size = 2) # 순서 상관없이 size 만큼 [1, 2, 3, 4, 5]에서 추출 np.random.choice([1, 2, 3], size = 3, replace = False) # 비복원추출: 최대 size = 배열 원소개수
행렬 생성
r = np.random.chocie([1, 2, 3], size = (5, 4)) # size:정수 - 1차원, tuple - 다차원 print(r.shape) # (5, 4) r # 1, 2, 3 에서 추출한 랜덤 원소로 구성된 5 * 4 행렬 리턴
확률 지정
r = np.random.choice([True, False], size = 100000, p = [0.1, 0.9]) # 모집단: [True, False], p[0.1, 0.9] -> sampling할 때 True는 0.1확률, False는 0.9 확률로 나오도록 처리
05 순서바꾸기
- shuffle(): 배열자체의 순서를 바꿈(원보 변경)
- permutation(): 순서를 바꾼 배열을 반환(카피본)
- 다차원 배열의 경우 0번 축을 기준으로만 순서 바꿈
arr = np.arange(0, 10) arr # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # permutation r = np.random.permutation(arr) # arr을 섞은 복사본 반환(원본 안 바뀜) r # shuffle np.random.shuffle(arr) # arr 원본 자체가 섞임 arr # arr 원본 자체가 섞인 것 확인 # 행렬 shuffle arr2 = np.arange(12), reshape(3, 4) arr.shape # (3,4) arr2 #array([[ 0, 1, 2, 3], # [ 4, 5, 6, 7], # [ 8, 9, 10, 11]]) np.random.permutation(arr2) # 0 축 기준으로만 원소가 섞인 것을 확인 가능 ex) [0, 4, 8] 안에서만 섞임
'코린이 유치원 > Numpy' 카테고리의 다른 글
[Numpy] 01 Numpy 생성 - zeros, ones, arange, linspace (0) 2022.06.22