ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
유사명문 코린이 유치원