본문 바로가기
Python

파이썬 numpy를 이용한 다차원 배열의 활용

by SANCODE 2023. 10. 6.

안녕하세요. 오늘은 파이썬 numpy에 대한 내용을 주제로 포스팅하려고 합니다. numpy는 파이썬의 핵심 라이브러리 중 하나로, 고성능 수치 계산을 위한 다차원 배열을 다루는 도구입니다. 데이터 과학, 머신 러닝, 공학, 과학 연구 등 다양한 분야에서 널리 사용되며, 파이썬을 데이터 분석 및 수학적 연산에 활용할 때 핵심 역할을 합니다. 이 포스팅에서는 numpy의 기초부터 활용까지 다양한 내용을 다뤄보도록 하겠습니다.



목차


    numpy란?

    NumPy(넘파이)는 "Numerical Python"의 줄임말로, 파이썬의 핵심 라이브러리 중 하나로 과학적 계산과 데이터 분석을 위한 다차원 배열을 다루는 패키지입니다. NumPy는 파이썬의 기본 자료형과 내장 함수로는 제공하지 않는 다차원 배열(ndarray)을 제공하며, 이를 활용하여 고성능 수치 계산을 수행할 수 있습니다. NumPy는 빠르고 메모리 효율적인 배열 연산을 지원하며, 데이터 처리, 변환, 필터링, 통계 분석, 시각화 등 다양한 수학 및 과학 연산에 사용됩니다.


    다차원 배열 (ndarray)

    NumPy의 핵심 데이터 구조인 다차원 배열은 동일한 데이터 타입의 요소로 구성된 n-차원 배열을 나타냅니다. 이를 통해 효율적인 데이터 저장 및 연산이 가능합니다.


    브로드캐스팅 (Broadcasting)

    NumPy는 다른 모양(shape)의 배열 간에도 연산이 가능하게 하는 브로드캐스팅 기능을 제공합니다.


    효율적인 연산

    NumPy는 C로 구현되어 있어 고속의 배열 연산을 지원하며, 내부적으로 메모리 관리 및 데이터 뷰 처리를 최적화합니다.


    수학 및 통계 함수

    NumPy는 다양한 수학 및 통계 함수를 제공하여 데이터 분석 및 처리 작업을 간편하게 수행할 수 있습니다.


    파일 입출력

    NumPy는 배열을 파일로 저장하고 파일에서 배열을 읽어올 수 있는 기능을 제공합니다.


    오픈 소스

    NumPy는 데이터 과학 및 공학 분야의 다른 라이브러리와 통합하여 사용할 수 있습니다. 예를 들어, SciPy, scikit-learn, pandas, Matplotlib 등 다양한 라이브러리와 호환성이 높습니다.



    NumPy는 데이터 분석, 과학 연구, 기계 학습, 이미지 처리, 신호 처리, 통계 분석 등 다양한 분야에서 필수적인 도구로 사용되며, 파이썬 생태계에서 핵심 역할을 하고 있습니다.



    numpy 배열 생성과 초기화

    NumPy 배열은 numpy 라이브러리를 임포트하고, 해당 라이브러리의 함수와 메서드를 사용하여 생성 및 초기화할 수 있습니다.


    배열 생성

    import numpy as np
    
    list_data = [1, 2, 3, 4, 5]
    array_from_list = np.array(list_data)
    
    tuple_data = (1, 2, 3, 4, 5)
    array_from_tuple = np.array(tuple_data)

    리스트나 튜플과 같은 파이썬의 기본 시퀀스 자료형을 NumPy의 array() 함수에 전달하면, 이를 고성능 수치 연산과 다차원 배열 처리를 지원하는 NumPy 배열로 변환하여, 데이터 과학이나 수치 계산 작업에서 효율적이고 편리하게 사용할 수 있도록 만들어 줍니다.


    초기화된 배열 생성

    import numpy as np
    
    zeros_array = np.zeros(5)  # 0으로 초기화된 크기가 5인 배열
    ones_array = np.ones(5)    # 1로 초기화된 크기가 5인 배열

    np.zeros(5)는 크기 5인 배열을 생성하고 모든 요소를 0으로 초기화하며, np.ones(5)는 크기 5인 배열을 생성하고 모든 요소를 1로 초기화하여, 각각 특정 값으로 초기화된 고정 크기 배열을 빠르게 만들 때 사용됩니다.


    특정 값으로 초기화

    import numpy as np
    
    constant_array = np.full(5, 7)  # 7로 초기화된 크기가 5인 배열

    np.full(5, 7)은 크기 5인 배열을 생성하고 모든 요소를 7로 초기화하여, 원하는 크기와 값으로 배열을 빠르게 만들 때 사용됩니다.


    범위 배열 생성

    import numpy as np
    
    range_array = np.arange(1, 10, 2)  # 1부터 10 미만까지 2씩 증가하는 배열 [1, 3, 5, 7, 9]

    np.arange(1, 10, 2)는 1부터 시작해서 10 미만까지 2씩 증가하는 숫자들로 구성된 배열을 생성하며, 결과는 [1, 3, 5, 7, 9]와 같은 배열이 됩니다.


    균등 간격의 배열 생성

    import numpy as np
    
    linspace_array = np.linspace(0, 1, 5)  # 0부터 1까지 5개의 균일한 간격으로 배열 생성 [0.  0.25  0.5  0.75  1.]

    np.linspace(0, 1, 5)는 0부터 1까지 구간을 5등분하여 균일한 간격으로 나눈 숫자들로 이루어진 배열을 생성하며, 결과는 [0.0, 0.25, 0.5, 0.75, 1.0] 입니다.


    난수로 초기화된 배열 생성

    import numpy as np
    
    random_array = np.random.rand(5)  # 0과 1 사이의 난수로 초기화된 크기가 5인 배열

    np.random.rand(5)는 0과 1 사이의 균등 분포를 따르는 난수 5개로 이루어진 배열을 생성하며, 실행할 때마다 서로 다른 임의의 값들로 초기화된 크기 5인 배열을 만듭니다.


    단위 행렬 생성

    import numpy as np
    
    identity_matrix = np.eye(3)  # 3x3 크기의 단위 행렬 생성

    np.eye(3)는 3x3 크기의 단위 행렬(identity matrix)을 생성하는 코드로, 대각선 요소는 1이고 나머지 요소는 0인 행렬을 만듭니다.


    배열의 크기 및 모양 변경

    import numpy as np
    
    original_array = np.array([1, 2, 3, 4, 5])
    reshaped_array = original_array.reshape(2, 3)  # 크기가 2x3인 배열로 변경

    original_array는 1차원 배열 [1, 2, 3, 4, 5]를 생성하고, reshape(2, 3)은 이 배열을 2행 3열 크기의 2차원 배열로 바꾸려 하지만, 원래 배열의 요소 개수(5)가 2x3=6과 맞지 않아 오류가 발생합니다. 배열을 재구성할 때는 총 요소 수가 같아야 합니다.



    위의 방법들을 활용하여 다양한 형태와 초기값을 가지는 NumPy 배열을 생성하고 초기화할 수 있습니다. NumPy는 이러한 다양한 초기화 방법을 제공하여 데이터 처리 및 분석을 용이하게 합니다.



    반응형


    numpy 배열의 기본 속성

    파이썬 NumPy 배열의 기본 속성에 대해 정리하겠습니다. NumPy 배열은 데이터를 저장하고 다루는 데 필요한 다양한 정보를 속성으로 가지고 있습니다.


    shape 속성

    shape 속성은 배열의 차원과 각 차원의 크기를 나타내는 튜플입니다. 예를 들어, (3, 4) 크기의 배열은 3개의 행과 4개의 열로 이루어진 2차원 배열을 의미합니다.

    import numpy as np
    
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr.shape)  # 출력: (2, 3) (2개의 행과 3개의 열)

    ndim 속성

    ndim 속성은 배열의 차원 수를 나타냅니다. 예를 들어, 2차원 배열은 ndim이 2입니다.

    import numpy as np
    
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr.ndim)  # 출력: 2 (2차원 배열)

    size 속성

    size 속성은 배열의 전체 요소 수를 나타냅니다.

    import numpy as np
    
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr.size)  # 출력: 6 (총 6개의 요소)

    dtype 속성

    dtype 속성은 배열의 데이터 타입을 나타냅니다. 예를 들어, 정수형 배열은 int64 데이터 타입을 갖습니다.

    import numpy as np
    
    arr = np.array([1, 2, 3])
    print(arr.dtype)  # 출력: int64 (정수형)

    itemsize 속성

    itemsize 속성은 배열의 각 요소의 바이트 크기를 나타냅니다.

    import numpy as np
    
    arr = np.array([1, 2, 3])
    print(arr.itemsize)  # 출력: 8 (int64 데이터 타입은 8바이트)

    이러한 배열 속성은 NumPy 배열의 모양, 크기, 데이터 타입 등을 확인하고 배열 연산 및 처리를 수행하는 데 도움이 됩니다.



    numpy를 이용한 배열 연산

    NumPy는 배열 간 및 배열 내부의 다양한 연산을 지원하므로, 데이터 처리 및 수치 계산을 효율적으로 수행할 수 있습니다.


    요소별 연산 (Element-wise Operations)

    NumPy 배열 간의 요소별 연산은 기본적으로 동일한 위치에 있는 요소끼리 수행됩니다.

    import numpy as np
    
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([4, 5, 6])
    
    # 덧셈
    result_add = arr1 + arr2  # [5, 7, 9]
    
    # 뺄셈
    result_subtract = arr1 - arr2  # [-3, -3, -3]
    
    # 곱셈
    result_multiply = arr1 * arr2  # [4, 10, 18]
    
    # 나눗셈
    result_divide = arr1 / arr2  # [0.25, 0.4, 0.5]

    이 코드는 두 개의 같은 크기 1차원 넘파이 배열 arr1과 arr2를 만들고, 배열 간에 요소별로 덧셈, 뺄셈, 곱셈, 나눗셈을 수행합니다. 각각의 연산 결과는 두 배열의 같은 위치 요소끼리 계산된 새로운 배열로 반환됩니다.


    스칼라 연산 (Scalar Operations)

    스칼라 연산은 배열에 스칼라 값을 더하거나 곱하는 등의 연산을 의미합니다.

    import numpy as np
    
    arr = np.array([1, 2, 3])
    
    # 스칼라 덧셈
    result_add_scalar = arr + 5  # [6, 7, 8]
    
    # 스칼라 곱셈
    result_multiply_scalar = arr * 2  # [2, 4, 6]

    이 코드는 1차원 넘파이 배열 arr에 스칼라 값(단일 숫자)을 더하거나 곱하는 연산을 수행하며, 배열의 모든 요소에 대해 각각 5를 더하거나 2를 곱한 결과 배열을 생성합니다.


    비교 연산 (Comparison Operations)

    배열 간의 비교 연산은 불리언 배열을 반환합니다.

    import numpy as np
    
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([2, 2, 2])
    
    # 요소별 비교 (크기 비교)
    result_comparison = arr1 > arr2  # [False, False, True]

    이 코드는 두 1차원 넘파이 배열 arr1과 arr2의 각 요소를 서로 비교하여 arr1의 각 요소가 arr2의 대응 요소보다 큰지 여부를 Boolean 배열로 반환합니다. 결과는 [False, False, True]로, 첫 번째와 두 번째 요소는 arr1이 크지 않고, 세 번째 요소만 arr1이 더 크다는 뜻입니다.


    집계 함수 (Aggregation Functions)

    NumPy는 배열 내 요소들을 집계하는 다양한 함수를 제공합니다.

    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    
    # 합계
    sum_result = np.sum(arr)  # 15
    
    # 평균
    mean_result = np.mean(arr)  # 3.0
    
    # 최댓값
    max_result = np.max(arr)  # 5
    
    # 최솟값
    min_result = np.min(arr)  # 1

    행렬 연산 (Matrix Operations)

    NumPy는 행렬 곱셈, 전치 행렬, 행렬식 등과 같은 선형 대수 연산도 지원합니다.

    import numpy as np
    
    matrix1 = np.array([[1, 2], [3, 4]])
    matrix2 = np.array([[5, 6], [7, 8]])
    
    # 행렬 곱셈
    result_matrix_multiply = np.dot(matrix1, matrix2)
    
    # 전치 행렬
    result_transpose = matrix1.T
    
    # 행렬식
    determinant = np.linalg.det(matrix1)

    NumPy의 다양한 함수와 연산자를 활용하여 배열 연산을 수행하면, 수치 계산과 데이터 분석 작업을 효율적으로 수행할 수 있습니다.



    numpy의 인덱싱과 슬라이싱

    배열의 특정 요소를 선택하거나 부분 배열을 추출하는 데 사용됩니다.


    인덱싱 (Indexing)

    인덱싱은 배열 내의 특정 요소에 접근하는 방법입니다. NumPy 배열은 0부터 시작하는 인덱스를 사용합니다.

    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    
    # 특정 인덱스의 요소에 접근
    element = arr[2]  # 3 (인덱스 2의 요소)
    
    # 음수 인덱스를 사용하여 끝에서부터 접근
    last_element = arr[-1]  # 5 (마지막 요소)

    슬라이싱 (Slicing)

    슬라이싱은 배열 내에서 부분 배열을 추출하는 방법입니다. 시작 인덱스부터 끝 인덱스 전까지의 요소를 선택합니다.

    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    # 인덱스 2부터 5까지의 부분 배열
    subset = arr[2:6]  # [3, 4, 5, 6]
    
    # 처음부터 인덱스 4까지의 부분 배열
    subset = arr[:5]  # [1, 2, 3, 4, 5]
    
    # 인덱스 3부터 끝까지의 부분 배열
    subset = arr[3:]  # [4, 5, 6, 7, 8, 9]
    
    # 음수 인덱스를 사용하여 끝에서부터 슬라이싱
    subset = arr[-3:]  # [7, 8, 9]
    
    # 스텝(간격)을 지정하여 슬라이싱
    subset = arr[1:7:2]  # [2, 4, 6] (1부터 6까지, 간격 2로 슬라이싱)

    다차원 배열 인덱싱 및 슬라이싱

    다차원 배열의 경우 각 차원에 대해 인덱싱과 슬라이싱을 적용할 수 있습니다.

    import numpy as np
    
    matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    
    # 특정 위치의 요소에 접근
    element = matrix[1, 2]  # 6 (2행 3열의 요소)
    
    # 행 슬라이싱
    row_slice = matrix[1, :]  # [4, 5, 6] (1행 전체)
    
    # 열 슬라이싱
    column_slice = matrix[:, 2]  # [3, 6, 9] (3열 전체)

    다차원 배열에서도 마찬가지로 슬라이싱 및 인덱싱을 사용하여 필요한 부분을 선택할 수 있습니다.



    최종 정리

    오늘은 파이썬 NumPy에 대한 기본적인 내용을 주제로 정리해 보았습니다. NumPy는 다차원 배열을 다루는 강력한 라이브러리로, 데이터 과학, 수치 계산, 과학 연구, 기계 학습 등 다양한 분야에서 활용되며, 배열 생성, 인덱싱, 슬라이싱, 배열 연산 등 다양한 기능을 제공합니다.
    NumPy를 활용하면 데이터 처리와 분석 작업을 효율적으로 수행할 수 있으며, 데이터 과학 프로젝트에서 핵심 역할을 합니다. 파이썬 생태계에서 데이터 관련 작업을 수행하는 데 필수적인 라이브러리 중 하나로, 데이터를 다루고 조작하는 데 필수적인 도구입니다.





    반응형