ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NumPy 한번에 끝내기 01 - 데이터 과학 핵심 도구 (배열 생성)
    빅데이터/NumPy 2022. 1. 17. 16:35

    유투버 '이수안 컴퓨터 연구소'님 강의 참조

     

     

     

     

     

    01 NumPy

    • Numerical Python의 약자로 고성능 과학 계산용 패키지로 강력한 N차원 배열 객체를 가지고 있음
    • 정교한 브로드캐스팅이 가능하고 파이썬 자료형 'LIST'와 비슷하지만 더 빠르고 메모리를 효율적으로 관리
    • 반복문 없이 데이터 배열에 대한 처리를 지원하며 빠르고 쉽다. 
    • 데이터 과학 도구에 대한 생태계의 핵심
    • Numpy를 사용하려면 import가 필요함
      import numpy as np


    • 보통 자바, C언어 등 배열/리스트/딕셔너리등을 써봤다면 어떻게 생겼는지 알 것이다. 이들은 보통 1차원 배열인데 'NumPy'는 2차원/3차원 까지도 해결이 가능 하다.

    또한 2차원/3차원으로 넘어가면 축이 생기는데 이 축을 잘 생각하여 진행 해야 한다

     

     

     

     

    02 NumPy 배열

    a1 = np.array([1,2,3,4,5])
    print(a1)
    
    [1 2 3 4 5]
    • 1차원 배열로써 np.array() 로 시작하며 괄호안에 리스트 형식과 같은 패턴으로 코드를 짠다
    print(a1[1], a1[4])
    
    2 5
    
    a1[1] = 4
    a1[4] = 2
    print(a1)
    
    [1 4 3 4 2]
    • 리스트형식 처럼 인덱싱 및 인덱싱을 활용하여 수정이 가능 하다

     

     

    a2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(a2)
    
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    • 2차원 배열로 리스트 괄호안에 대괄호를 추가하여 작성 한다
    print(a2[0,0], a2[1,1], a2[2,2])
    1 5 9
    
    a2[0,0] = 3
    a2[1,1] = 8
    a2[2,2] = 1
    
    print(a2)
    
    [[3 2 3]
     [4 8 6]
     [7 8 1]]
    • 마찬가지로 인덱싱이 가능하며 수정도 당연히 된다

     

     

     

    a3 = np.array([ [ [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] ] ])
    
    print(a3)
    
    [[[ 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]]]
    • 3차원 배열. 대괄호 개수를 정확히 해줘야 한다.
    print(a3[0,0,0], a3[1,1,1], a3[2,2,2])
    
    1 14 27
    
    
    a3[0,0,0] = 2
    a3[1,1,1] = 5
    a3[2,2,2] = 7
    
    print(a3)
    
    [[[ 2  2  3]
      [ 4  5  6]
      [ 7  8  9]]
    
     [[10 11 12]
      [13  5 15]
      [16 17 18]]
    
     [[19 20 21]
      [22 23 24]
      [25 26  7]]]

     

     

     

     

    03 배열 생성 및 초기화

    #zeros() : 배열안의 모든 요소를 0으로 초기화
    np.zeros(10)
    array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
    
    
    #ones() : 배열안의 모든 요소를 1로 초기화
    np.ones(5)
    array([1., 1., 1., 1., 1.])
    
    
    np.ones((3,3))
    array([[1., 1., 1.],
           [1., 1., 1.],
           [1., 1., 1.]])
           
    
    #full() : 모든 요소를 지정한 값으로 초기화 ((차원 및 배열 값), 지정 값)
    np.full((3,3), 1.23)
    array([[1.23, 1.23, 1.23],
           [1.23, 1.23, 1.23],
           [1.23, 1.23, 1.23]])
           
    
    #eye() : 단위 행렬(indentity matrix) 생성 (주 대각석의 원소가 모두 1, 나머지는 0인 정사각형 행렬)
    np.eye(3)
    array([[1., 0., 0.],
           [0., 1., 0.],
           [0., 0., 1.]])
           
    
    #tri() :삼각형 행렬 생성 (삼각형 부분에 1로 표시)
    np.tri(3)
    array([[1., 0., 0.],
           [1., 1., 0.],
           [1., 1., 1.]])
           
           
    #empty() : 초기화 되지 않은 배열 생성. 
    #(초기화가 없어서 배열 생성 시 빠름 /  초기화 되지 않아서 기존 메모리 위치에 존재하는 값이 있음)
    np.empty(3)
    array([1., 1., 1.])
    
    
    #_like() : 지정된 배열의 'shape'과 같은 행렬 생성
    #.zeros_like() / .ones_like() / .full_like() / .empty_like()
    print(a1)
    np.zeros_like(a1)
    [1 4 3 4 2]
    array([0, 0, 0, 0, 0])
    
    
    print(a2)
    np.ones_like(a2)
    [[3 2 3]
     [4 8 6]
     [7 8 1]]
    array([[1, 1, 1],
           [1, 1, 1],
           [1, 1, 1]])
           
           
    #full_like(따라갈 배열 모양, 채울 값)
    print(a3)
    np.full_like(a3, 10)
    [[[ 2  2  3]
      [ 4  5  6]
      [ 7  8  9]]
    
     [[10 11 12]
      [13  5 15]
      [16 17 18]]
    
     [[19 20 21]
      [22 23 24]
      [25 26  7]]]
    array([[[10, 10, 10],
            [10, 10, 10],
            [10, 10, 10]],
    
           [[10, 10, 10],
            [10, 10, 10],
            [10, 10, 10]],
    
           [[10, 10, 10],
            [10, 10, 10],
            [10, 10, 10]]])

     

     

     

     

    04 생성한 값으로 배열 생성

    # arange() : 정수 범위로 배열 생성 
    np.arange(0, 30, 2) #arrange(시작값, 끝값, 증가 폭)
    array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28])
    
    
    
    # linspace() : 범위 내에서 균등 간격의 배열 생성
    np.linspace(0, 1, 5) #linspace(시작값, 끝값, 간격)
    array([0.  , 0.25, 0.5 , 0.75, 1.  ])
    
    
    # logspace() : 범위 내에서 균등간격으로 로그 스케일로 배열 생성
    np.logspace(0.1, 1, 20) #logspace(시작값, 끝값, 간격)
    array([ 1.25892541,  1.40400425,  1.565802  ,  1.74624535,  1.94748304,
            2.1719114 ,  2.42220294,  2.70133812,  3.0126409 ,  3.35981829,
            3.74700446,  4.17881006,  4.66037703,  5.19743987,  5.79639395,
            6.46437163,  7.2093272 ,  8.04013161,  8.9666781 , 10.        ])

     

     

     

     

     

    05 랜덤값으로 배열 생성

    다양한 랜덤값을 만드는 함수들이 있지만 대표적으로 많이 쓰는 함수들을 보자

    #.random() : 랜덤한 수의 배열 생성 - 기본적으로 실수 값 반환
    np.random.random((3,3)) #.random((원하는 차원 수))
    array([[0.17263545, 0.33109652, 0.75507276],
           [0.49656039, 0.27772408, 0.80011634],
           [0.03817196, 0.60595324, 0.08992971]])
           
    
    #.ranint() : 일정 구간의 랜덤 정수의 배열 생성
    np.random.randint(0, 10, (3,3)) #.randint(시작값, 끝값, (원하는 차원 수))
    array([[7, 0, 4],
           [6, 1, 8],
           [1, 2, 9]])
    
    
    # .normal() : 정규분포(Normal distribution)를 고려한 랜덤한 수의 배열 생성
    # 평균 = 0, 표준편차=1, 3*3 배열
    np.random.normal(0, 1, size=(3,3)) #.normal(0, 1, (3,3))
    array([[-1.08020897,  2.56568459, -0.52557213],
           [-2.14473104,  0.5190441 , -0.6741116 ],
           [ 0.45253994, -0.63800886,  2.25517641]])
           
    
    # .rand() : 균등분포(Uniform distribution)를 고려한 랜덤한 수의 배열 생성
    np.random.rand(3,3)
    array([[0.98630275, 0.60800686, 0.72374373],
           [0.70780994, 0.17668724, 0.60007655],
           [0.13051907, 0.08224639, 0.08076543]])
           
    
    # .randn() : 표준정규분포(Standard normal distribution)를 고려한 랜덤한 수의 배열 생성
    np.random.randn(3,3)
    array([[-0.51564717,  0.62958447, -1.4793792 ],
           [ 0.5162742 , -0.12866318,  0.5354871 ],
           [-1.17491695,  0.17182679, -2.30818457]])

     

     

     

     

     

     

    06 표준 데이터 타입 (Dtype)

    np.zeros(20, dtype=int)
    array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
    
    np.ones((3,3), dtype=bool)
    array([[ True,  True,  True],
           [ True,  True,  True],
           [ True,  True,  True]])
           
    np.full((3,3), 1.0, dtype=float)
    array([[1., 1., 1.],
           [1., 1., 1.],
           [1., 1., 1.]])

     

     

     

     

     

     

    07 날짜/시간 배열 생성

    date = np.array('2022-01-17', dtype=np.datetime64)
    date
    array('2022-01-17', dtype='datetime64[D]')
    
    date + np.arange(12)
    array(['2022-01-17', '2022-01-18', '2022-01-19', '2022-01-20',
           '2022-01-21', '2022-01-22', '2022-01-23', '2022-01-24',
           '2022-01-25', '2022-01-26', '2022-01-27', '2022-01-28'],
          dtype='datetime64[D]')
          
    
    
          
    datetime = np.datetime64('2021-01-22 12:00')
    datetime
    numpy.datetime64('2021-01-22T12:00')
    
    datetime = np.datetime64('2021-01-22 12:00:12.34', 'ns')
    datetime
    numpy.datetime64('2021-01-22T12:00:12.340000000')
Designed by Tistory.