본문 바로가기
공부 목록/IT & 프로그래밍

파이썬 수치계산을 위한 필수 함수 numpy.array() 정리

by 독학박사 2023. 6. 11.

목차


     파이썬에서는 기본 데이터 구조인 list가 존재합니다. 하지만, 머신러닝을 구현할 때 ndarray의 데이터 구조를 사용하는 것을 많이 볼 수 있는데, ndarray는 'C언어'기반의 라이브러리로 list보다 연산 속도가 빠릅니다. 또한 딥러닝의 모델 구조에 따라 데이터의 shape을 변경해야 하는 일이 많아 ndarray 타입의 데이터를 다뤄야 합니다. 이번에는 numpy라이브러리에서 제공하는 array에 대해 알아보도록 하겠습니다.

     

     

    수치계산을 위한 numpy의 array 함수
    수치계산을 위한 numpy의 array 함수

     

     

    1. numpy.array() ?

    Numpy(Numerical Python)는 파이썬에서 과학적 및 수치적 계산을 수행하는 데 사용되는 핵심 라이브러리입니다. Numpy의 핵심 기능 중 하나는 다차원 배열인 ndarray 객체입니다.

     

    ndarray는 Numpy의 다차원 배열 객체로, 동일한 유형의 데이터를 담을 수 있습니다. 이러한 배열은 메모리 내에서 연속적으로 저장되며, 각 요소는 동일한 크기로 메모리에 배치됩니다. 따라서 Numpy 배열은 매우 효율적인 수치 계산을 제공합니다.

     

    Numpy 배열은 여러 차원으로 구성될 수 있습니다. 1차원 배열은 벡터, 2차원 배열은 행렬, 3차원 배열은 다차원 행렬 등으로 생각할 수 있습니다. 다차원 배열은 다음과 같이 생성할 수 있습니다.

     

    import numpy as np
    
    # 1차원 배열
    arr1 = np.array([1, 2, 3, 4, 5])
    
    # 2차원 배열
    arr2 = np.array([[1, 2, 3], [4, 5, 6]])
    
    # 3차원 배열
    arr3 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

     

    ndarray의 중요한 특징

    Shape(형상):
    ndarray.shape 속성을 통해 배열의 크기 및 차원을 확인할 수 있습니다. 예를 들어, arr2.shape는 (2, 3)이고, arr3.shape는 (2, 2, 2)입니다.

    Data Type(자료형):
    ndarray.dtype 속성을 통해 배열에 저장된 요소의 데이터 유형을 확인할 수 있습니다. 예를 들어, arr1.dtype는 int64이고, arr2.dtype는 int64입니다. Numpy는 다양한 데이터 유형을 지원합니다.

    Indexing(인덱싱) 및 Slicing(슬라이싱):
    Numpy 배열은 0부터 인덱싱 되며, 슬라이싱을 통해 배열의 일부분을 추출할 수 있습니다. 예를 들어, arr1[0]는 첫 번째 요소를 가져오고, arr2[:, 1]은 두 번째 열을 추출합니다.

    벡터화 연산:
    Numpy는 벡터화 연산을 지원하여 배열의 요소 간 연산을 간단하게 수행할 수 있습니다. 예를 들어, arr1 * 2는 배열의 모든 요소를 2배로 만듭니다.

     

     

    2. np.array() 사용법

     np.array() 함수는 이러한 인자들을 활용하여 입력된 객체를 Numpy 배열로 변환합니다. 반환된 배열은 ndarray 클래스의 인스턴스이며, 이를 통해 다차원 배열을 다루고 수학적 연산을 수행할 수 있습니다. 이 함수의 시그니처와 각 인자에 대해 설명드리겠습니다. 

     

    시그니처:

    np.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)

     

     

    인자 설명:

    object:
    배열로 변환될 객체입니다. 리스트, 튜플, 다른 배열 등의 객체를 전달할 수 있습니다.

    dtype:
    배열 요소의 데이터 유형을 지정하는 매개변수입니다. 기본적으로 None으로 설정되어 있으며, 이 경우 입력된 객체의 데이터 유형에 따라 자동으로 추론됩니다. 원하는 경우 다양한 데이터 유형 중 하나를 선택하여 지정할 수 있습니다. 예를 들어, dtype=np.int32와 같이 사용할 수 있습니다.

    copy:
    배열을 복사할지 여부를 결정하는 매개변수입니다. 기본적으로 True로 설정되어 있습니다. 따라서 입력된 객체의 복사본이 배열로 생성됩니다. False로 설정하면 입력된 객체와 배열이 메모리를 공유하게 됩니다.

    order:
    배열의 메모리 배치 방식을 지정하는 매개변수입니다. 기본적으로 'K'로 설정되어 있으며, 이는 메모리 내의 데이터 배치 방식을 시스템에 맡깁니다. 'C'는 C 스타일의 로우 메이저(row-major) 방식을, 'F'는 포트란 스타일의 칼럼 메이저(column-major) 방식을 지정합니다.

    subok:
    True로 설정하면 하위 클래스인 배열 객체가 반환될 수 있습니다. 기본적으로 False로 설정되어 있으며, 반환된 배열은 기본적으로 ndarray 클래스의 인스턴스입니다.

    ndmin:
    최소한으로 가질 차원의 수를 지정하는 매개변수입니다. 기본값은 0으로, 입력된 객체의 차원에 따라 자동으로 배열의 차원이 결정됩니다. ndmin을 설정하여 최소한의 차원을 보장할 수 있습니다.

     

    3. np.array 파이썬 기본 데이터 구조 list와의 차이점

    메모리 사용:

    Numpy 배열(np.array)은 동일한 데이터 유형의 요소를 메모리 내에서 연속적으로 저장합니다. 반면에 리스트는 각 요소가 개별적인 객체로 메모리에 저장됩니다. 이로 인해 Numpy 배열은 메모리 사용이 효율적이며, 대규모 데이터 처리에 더 적합합니다.

     

    속도:

    Numpy 배열은 C로 구현되어 있기 때문에 벡터화 연산과 같은 수치 연산을 빠르게 처리할 수 있습니다. 리스트는 파이썬 인터프리터에 의해 처리되므로 배열에 비해 연산 속도가 느릴 수 있습니다.

     

    지원되는 연산:

    Numpy 배열은 배열 간의 산술 연산, 브로드캐스팅, 선형 대수 연산, 행렬 연산 등 다양한 수치 연산을 지원합니다. 리스트는 이러한 연산을 제공하지 않으며, 요소 단위로 반복문을 사용하여 처리해야 합니다.

     

    차원과 모양:

    Numpy 배열은 다차원 배열을 지원하며, 배열의 모양과 차원을 손쉽게 조작할 수 있습니다. 리스트는 일차원 데이터 구조로 제공되며, 다차원 데이터를 처리하기 위해 중첩 리스트를 사용해야 합니다.

     

    불변성 vs 가변성:

    리스트는 가변(mutable) 객체로, 요소를 추가, 삭제, 수정할 수 있습니다. 반면에 Numpy 배열은 요소를 수정할 수 있지만, 크기를 변경하거나 요소를 추가, 삭제하는 데는 적합하지 않습니다. 대신에 Numpy 배열의 크기를 변경하는 경우 새로운 배열이 생성됩니다.

     

     

    4. 마치며

    Numpy 배열은 수학, 과학, 데이터 분석 등 다양한 분야에서 널리 사용되며, 빠른 연산 속도와 간결한 코드 작성을 제공합니다. Numpy에는 배열 생성, 배열 조작, 선형 대수, 푸리에 변환, 난수 생성 등을 포함한 다양한 기능이 있습니다. 파이썬의 기본 데이터 구조인 list와는 형식이 비슷하긴 하지만 Numpy의 array의 속도가 빠르기 때문에 데이터의 크기가 크고 수치 계산과 관련된 작업을 수행해야 하는 경우에는 Numpy 배열을 사용하는 것이 좋습니다. 작은 크기의 일반적인 데이터 구조와 일반적인 연산을 처리해야 하는 경우에는 파이썬의 리스트를 사용하는 것이 유용할 수 있습니다.