ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2월 1주차-2/7(1)]🔥 NumPy 기초 정리: 다차원 배열과 연산 완벽 가이드
    Why Not SW CAMP 5기/수업 기록 2025. 2. 7. 12:27

    데이터 분석과 과학 계산을 할 때 NumPy(넘파이) 는 필수 라이브러리입니다.
    특히 대규모 데이터 연산과 다차원 배열을 효율적으로 처리할 수 있는 기능을 제공합니다.
    이번 포스팅에서는 NumPy의 기초 개념과 다양한 연산 방법을 정리해보겠습니다! 🚀


    🏗️ NumPy 배열의 기본 개념

    NumPy 배열(ndarray)은 다차원 배열을 효과적으로 다루는 자료구조입니다.
    파이썬의 리스트와 달리 모든 요소가 같은 데이터 타입을 가지며, 고속 연산이 가능합니다.

    import numpy as np
    
    lst = [2, 3, 4]
    num_array = np.array(lst)
    

    위 코드를 실행하면 num_array는 1차원 배열이 됩니다.
    NumPy 배열은 다양한 속성을 제공하는데, 몇 가지 중요한 속성을 살펴보겠습니다.

    📌 NumPy 배열의 속성

    print(num_array.shape)    # (3,) -> 배열의 형상(크기)
    print(num_array.ndim)     # 1 -> 배열의 차원(1D 배열)
    print(num_array.dtype)    # int32 -> 배열의 데이터 타입
    print(num_array.itemsize) # 4 -> 각 요소의 크기 (byte 단위)
    print(num_array.size)     # 3 -> 배열의 요소 개수
    
    • shape: 배열의 형상(크기)
    • ndim: 배열의 차원 수
    • dtype: 배열의 데이터 타입
    • itemsize: 배열의 요소 크기 (바이트 단위)
    • size: 배열의 총 요소 개수

    🔢 NumPy 배열 연산

    NumPy 배열은 기본적으로 요소별 연산을 수행합니다.
    즉, 같은 위치에 있는 요소끼리 연산이 이루어집니다.

    a = np.array([10, 20, 30])
    b = np.array([1, 2, 3])
    
    print(a + b)  # array([11, 22, 33])
    print(a - b)  # array([ 9, 18, 27])
    print(a * b)  # array([10, 40, 90])
    print(a / b)  # array([10. , 10. , 10.])
    

    이처럼 NumPy는 벡터화 연산(vectorized operation)을 지원하여 반복문 없이 빠른 연산이 가능합니다.

    🏹 브로드캐스팅(Broadcasting)

    NumPy에서는 차원이 다른 배열끼리도 연산이 가능합니다.
    이를 브로드캐스팅(Broadcasting) 이라고 하며, 작은 배열이 자동으로 확장됩니다.

    a = np.array([10, 20, 30])
    print(a * 10)  # array([100, 200, 300])
    

    📌 2차원 배열과 1차원 배열 연산

    b = np.array([[10, 20, 30],
                  [40, 50, 60]])
    c = np.array([2, 3, 4])
    
    print(b + c)
    '''
    array([[12, 23, 34],
           [42, 53, 64]])
    '''
    

    NumPy는 자동으로 행렬의 크기를 맞춰 연산을 수행합니다.
    이러한 기능 덕분에 고속 벡터 연산이 가능하죠! 🚀


    🏗️ 다차원 배열 생성

    NumPy에서는 다양한 방식으로 다차원 배열을 생성할 수 있습니다.

    1️⃣ 기본 배열 생성 함수

    zero = np.zeros((2,3))  
    one = np.ones((2,3))  
    full = np.full((2,3), 123)
    eye = np.eye(4)  
    

    출력 결과:

    zeros:
    [[0. 0. 0.]
     [0. 0. 0.]]
    
    ones:
    [[1. 1. 1.]
     [1. 1. 1.]]
    
    full:
    [[123 123 123]
     [123 123 123]]
    
    eye (단위 행렬):
    [[1. 0. 0. 0.]
     [0. 1. 0. 0.]
     [0. 0. 1. 0.]
     [0. 0. 0. 1.]]
    

    2️⃣ 연속된 숫자로 배열 생성

    np.arange(0, 10, 2)  # array([0, 2, 4, 6, 8])
    np.linspace(0, 10, 5)  # array([ 0. , 2.5, 5. , 7.5, 10. ])
    
    • arange(start, stop, step): 지정된 간격으로 배열 생성
    • linspace(start, stop, num): 시작과 끝을 포함하여 균등한 간격으로 배열 생성

    🔄 배열 조작과 변형

    📌 배열 삽입 (insert)

    a = np.array([1, 3, 4])
    np.insert(a, 1, 2)  # array([1, 2, 3, 4])
    

    2차원 배열에서 삽입

    b = np.array([[1, 1], [2, 2], [3, 3]])
    np.insert(b, 1, 4, axis=0)
    '''
    array([[1, 1],
           [4, 4],
           [2, 2],
           [3, 3]])
           
    axis = 1일 경우
    [[1 4 1]
     [2 4 2]
     [3 4 3]]
    '''

    📌 배열 뒤집기 (flip)

    c = np.array([[1, 2, 3],
                  [4, 5, 6]])
    
    np.flip(c, axis=1)
    '''
    array([[3, 2, 1],
           [6, 5, 4]])
    '''
    

    📌 배열 정렬 (sort)

    d = np.array([[35, 24, 55],
                  [69, 19, 9],
                  [4, 1, 11]])
    
    d.sort()
    print(d)
    '''
    [[24 35 55]
     [ 9 19 69]
     [ 1  4 11]]
    '''
    
    d.sort(axis=0)
    print(d)
    '''
    [[ 1  4 11]
     [ 9 19 55]
     [24 35 69]]
    '''
    

    🎭 다차원 배열 변형

    📌 배열 차원 변경 (reshape)

    sh = np.arange(12)
    r = sh.reshape(3, 4)
    
    print(r)
    '''
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    '''
    

    📌 배열 1차원으로 변경 (flatten)

    b = np.array([[1,1], [2,2], [3,3]])
    b.flatten()
    # array([1, 1, 2, 2, 3, 3])
    

    🏆 행렬 연산

    📌 행렬 곱 (matmul)

    a = np.array([[1, 2],
                  [3, 4]])
    
    b = np.array([[10, 20],
                  [30, 40]])
    
    np.matmul(a, b)
    '''
    array([[ 70, 100],   
           [150, 220]])
    '''
    

    🚀 마무리

    NumPy는 데이터 과학과 머신러닝에서 필수적인 라이브러리입니다.
    이번 포스팅에서는 기본적인 배열 생성부터 고급 연산까지 다뤄보았습니다.

    추후에는 고급 NumPy 기능과 실전 데이터 분석 활용법도 다뤄보겠습니다!
    질문이나 추가 내용이 있다면 댓글로 남겨주세요! 📢🔥

Designed by Tistory.