-
[NumPy#1] 넘파이란? dtype, astype(), itemsize, size, shapeMachine 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
'Machine Learning > numpy & pandas & maplotlib' 카테고리의 다른 글
[NumPy] np.pad에 대한 이해 (0) 2023.10.03 [numpy] axis, rank 이해. (n,)와(n,1)의 차이. keepdims (0) 2023.09.05 [Pandas#1] Pandas 기초 (0) 2023.08.05 [NumPy] np.where() (0) 2023.08.04 [NumPy] np.random.rand(), RandomState(), randn(), randint(), random(), normal()정리 (0) 2023.08.04