ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] Numpy란?
    언어/파이썬 & 장고 2020. 2. 18. 21:36

    Numpy란?

    Numpy는 다차원 배열을 쉽게 처리하고 효율적으로 사용할 수 있도록지원하는 파이썬의 패키지입니다. NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공합니다. 데이터 분석을 할때, Pandas와 함께 자주 사용하는 도구로 등장합니다.

    왜 Numpy를 사용할까

    데이터란 이미지, 오디오, 텍스트, 숫자 등 다양한 형태와 크기로 존재합니다. 사람은 이런 데이터들을 가지고 이해하지만 컴퓨터는 0 또는 1만 이해합니다. 여기서 핵심은 데이터를 숫자의 배열로 볼 수 있습니다. 실제로 데이터 분석을 수행하기 위한 전제 조건은 컴퓨터가 이해할 수 있도록 데이터를 숫자 형식으로 변환하는 것입니다. 여기서 효율적으로 배열을 저장 및 조작할 수 있어야 하는데 이러한 요구사항으로 Numpy 패키지가 나오게 됩니다. 파이썬의 내장 기능인 리스트 또한 Numpy 배열과 동일한 기능을 제공할 수 있기 때문에 왜 Numpy를 사용해야 하는지 의문이 듭니다. 배열의 크기가 작으면 문제가 되지 않지만 Numpy 배열은 데이터의 크기가 커질수록 저장 및 가공을 하는데 효율성을 보장합니다. 이러한 장점으로 파이썬의 Numpy 패키지는 Data Science에 핵심적인 도구로 인식이 되고 있습니다.

    설치

    아래의 명령어로 numpy 패키지를 쉽게 설치할 수 있습니다

    $ pip install numpy

    배열 선언

    numpy에 배열을 넘겨 numpy 타입으로 생성할 수 있습니다.

    import numpy as np  arr1 = np.array([1, 2, 3, 4])  print(arr1) print(type(arr1))   # [1 2 3 4] # <class 'numpy.ndarray'>

     

    array 메소드에 dtype 키워드로 타입을 지정하여 어레이의 값들에 타입을 지정할 수 있습니다. 

    • 해당 키워드는 float, int, bool, str, object 등을 줄 수 있습니다.
    arr2 = np.array([1, 2, 3, 4], dtype='float32')  print(type(arr2)) print(arr2)   # <class 'numpy.ndarray'> # [1. 2. 3. 4.]

     

    또한 1차원 배열 이상을 선언할 수 있습니다.

    lists = [[0,1,2], [3,4,5], [6,7,8]] arr2d = np.array(lists)  print(arr2d)   # [[0 1 2] #  [3 4 5] #  [6 7 8]]

     

    다중 배열에서 특정 값을 호출할 때, list와 다르게 콤마로 구분지어 사용합니다.

    x2 = np.array([[3, 2, 5, 5],[0, 1, 5, 8], [3, 0, 5, 0]])  print(x2[0,3])  
    
    
    # 5

     

    그리고 파이썬의 내장 기능인 리스트와 다르게 Numpy는 아래와 같은 기능을 제공합니다.

    arr1 = np.array([1, 2, 3, 4]) print(arr1)  # Vector (element-wise) operations print(arr1 * 2) print(arr1 + 2) print(arr1 * arr1)   list1 = [1,2,3,4]  # [1 2 3 4] # [2 4 6 8] # [3 4 5 6] # [ 1  4  9 16]  
    
    ## 내장 기능 list는 아래와 같이 동작한다. list1 = [1,2,3,4]  print(list1 * 2) print(list1 + 2) print(list1 * list1)  # [1, 2, 3, 4, 1, 2, 3, 4] # 오류 발생 # 오류 발생

     

    아래는 파이썬의 내장기능 list와 비교하여 Numpy만의 기능 및 장점입니다.

    1. Numpy의 배열은 생성 이후 크기를 변경할 수 없음. 만약 변경해야 하는 사항이 있을 시, 새로 생성해야 함
    2. list와 다르게 Numpy 배열의 모든 값의 타입은 dtype으로 같음
    3. list보다 메모리 공간을 덜 차지함

     

    배열에서 제공하는 속성은 다음과 같습니다.

    x = np.random.randint(0, 10, (3, 3))  print("ndim: ", x.ndim) print("shape:", x.shape) print("x size: ", x.size) print("dtype:", x.dtype) print("itemsize:", x.itemsize, "bytes") print("nbytes:", x.nbytes, "bytes")    # ndim:  2 # shape: (3, 3) # x size:  9 # dtype: int64 # itemsize: 8 bytes # nbytes: 72 bytes

     

     

    댓글