ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [NumPy#1] 넘파이란? dtype, astype(), itemsize, size, shape
    Machine Learning/numpy & pandas & maplotlib 2023. 8. 4. 01:39

    * 넘파이(NumPy)란?

    • 넘파이(NumPy)는 파이썬의 다차원 배열을 다루기 위한 라이브러리이다.
    • 2005년 Travis  Oliphant이 Numarray을 Numeric에 합쳐 만들었다.
    • 넘파이 배열 데이터 구조를 ndarray라고도 부른다. n-dimensional  array의 준말이다.
    • 넘파이는 C언어로 작성되었고, 넘파이의 속도가 빠른 이유는 연속된 메모리 블럭을 갖기 때문에 CPU가 빠르게 읽을 수 있다. 반면에, Python의 리스트는 랜덤한 메모리 블럭의 객체를 지정하는 포인터 개념이기 때문에 CPU가 빠르게 캐치하지 못해서 속도가 느린 것이다.
    • 넘파이 배열은 고정된 사이즈를 갖고,  homogenous하다. 원소들이 반드시 같은 타입이어야 한다.
    • 파이썬 리스트에서 원소를 추가하거나 삭제하는 과정이 쉬운 반면, 넘파이에서는 새로운 배열을 만들고 모두 옮기기 때문에 매우 expensive하다.
    • 넘파이는 vectorized operations(백터화)와 broadcasting(브로드캐스팅) 때문에 파이썬 못지 않게 우아하고 가독성 있을 수 있다.
    • 넘파이 배열은 최대 32차원까지 가질 수 있다.

    * dtype: (attribute) 배열의 타입 출력.

    기본적으로 넘파이는 파이썬에서 넘겨 받은 인자들로 배열을 구성하기 때문에 타입을 알아서 추론한다.

    배열의 타입 확인은 dtype attribute를 이용한다.(속성은 멤버변수이므로 호출시 괄호가 없다.)

     >>> ary1d.dtype
     dtype('int64')

    다른 타입으로 배열을 만들고 싶으면, 인자를 넘길 때 dtype parameter로 타입을 지정해주면 된다.

    넘파이에 있는 타입 종류가 궁금하면 여기서 확인할 수 있다.

     

    * astype() : (method) 타입 변경 함수.

    이미 만들어진 배열을 다운 캐스트나 리캐스트하고 싶으면 astype method를 사용한다. 

    >>> float32_ary = ary1d.astype(np.float32)	# 괄호에 변경할 타입을 넣는다.
    >>> float32_ary
    array([[1., 2., 3.],
           [4., 5., 6.]],    dtype=float32)
           
    >>> float32_ary.dtype
    dtype('float32')

     

    * itemsize : (attribute) 배열 요소 타입의 byte사이즈 출력

    int64는 8byte, int32는 4byte를 갖는다.

    >>> ary2d = np.array([[1, 2, 3],
                         [4, 5, 6]],    dtype='int64')
    >>> ary2d.itemsize
    8	# 8byte

     

    * size : (attribute) 요소의 개수 출력.

    >>> ary2d.size
    6

     

    * ndim : (attribute) 차원 개수(rank of tensor) 출력.

    여기서 차원은 몇 중 리스트인지를 의미. ary2d는 2중 리스트이므로 2차원.

    >>> ary2d.ndim
    2

     

    * shape : (attribute) 각 차원의 개수(axes) 출력.

    여기서 차원은 n중 리스트의 각 요소가 몇 개인지 출력. 바깥 리스트부터 세서 튜플로 출력함.

    >>> ary=np.array([[[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]],[[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]], dtype='int64')
    >>> ary.shape
    (2, 5, 3)
    
    >>> ary=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]], dtype='int64')
    >>> ary.shape
    (5, 3)

     

    * zero-dimentional array

    0차원 배열을 생성.

    >>> scalar=np.array(5)

     

    0차원 배열의 ndim

    >>> scalar.ndim
    0

     

    0차원 배열의 shape

    >>> scalar.shape
    ()

     

     

    * 참고 : 

    https://numpy.org/doc/stable/reference/arrays.ndarray.html

    https://sebastianraschka.com/pdf/books/dlb/appendix_f_numpy-intro.pdf

    댓글

Designed by Tistory.