numpy에 대해 알아보자
numpy의 기본 단위는 ndarray 객체이다. ndarray란!?
ndarray: n차원(Dimension) 배열(Array)객체 라는 뜻으로 numpy의 기본 단위다.
차원은 n차원으로 이루어져있는데 n차원은 n-1차원을 기본 단위로 갖는 특성을 가지고 있다.
n차원 배열의 형태
다음은 ndarray의 기본적인 특징이다.
- Ndarray내의 데이터 값은 숫자, 문자, 불 값 등이 모두 가능하다.
- 숫자형의 경우 int형과 unisigned int형(8, 16, 32bit) 그리고 float형 도 가능하고 이보다 더 큰 숫자 값이나 정밀도를 위해 complex 타입도 제공한다.
- Ndarray내의 데이터 값은 그 연산의 특성상 같은 데이터 타입만 가능하다. 즉, 한개의 ndarray 객체에 int와 float가 함께 있을 수 없다.
- Ndarray내의 데이터 타입은 .dtype으로 확인 가능하다.
- 타입을 변경하고자 하면 .astype()에 인자로 입력 float를 int로 변경하여 메모리 절약이 가능하다 방대한 데이터를 다룰때 꼭 필요하다.
Numpy ndarray 개요
코드
import numpy as np
array1 = np.array([1,2,3]) #np.array(리스트)는 해당 객체를 ndarray타입으로 만들어준다.
print('array1 type:',type(array1))
print('array1 array 형태:',array1.shape)
array2 = np.array([[1,2,3],
[2,3,4]])
print('array2 type:',type(array2)) # type(객체)로 타입 확인 가능
print('array2 array 형태:',array2.shape) #.shape로 형태 확인 가능
array3 = np.array([[1,2,3]])
print('array3 type:',type(array3))
print('array3 array 형태:',array3.shape)
출력결과
array1 type: <class 'numpy.ndarray'>
array1 array 형태: (3,)
array2 type: <class 'numpy.ndarray'>
array2 array 형태: (2, 3)
array3 type: <class 'numpy.ndarray'>
array3 array 형태: (1, 3)
위를 보면 array1과 array3의 차이를 아는게 중요하다.
array1은 형태는 같지만 단일 리스트로 1차원이고
array3는 중첩리스트로 2차원이다.
나중에 배열끼리 concat등을 이용해서 병합할때 차원 통일을 해주어야 하기 때문에 꼭 알아둬야 한다.
아래코드는 리스트 하나를 ndarray형태로 변환한 모습이다.
코드
list1 = [1,2,3]
print(type(list1))
array1 = np.array(list1)
print(type(array1))
print(array1, array1.dtype)
출력결과
<class 'list'>
<class 'numpy.ndarray'>
[1 2 3] int64
형태는 ndarray이고 1, 2, 3 이 요소로 들어간 것을 알 수 있으며 타입은 정수형이다.
아까 배열 안에는 다른 타입이 들어갈 수 없다고 했는데 막상 다른 타입을 넣어도 오류가 발생하지는 않는다.
다음을 보면 다른 타입이 들어가더라도 형변환이 되어 타입이 통일이 되서 들어간 것을 확인할 수 있다.
코드
list2 = [1, 2, 'test']
array2 = np.array(list2)
print(array2, array2.dtype)
list3 = [1, 2.0, 3]
array3 = np.array(list3)
print(array3, array3.dtype)
출력결과
['1' '2' 'test'] <U21 # 정수형이 문자형으로 통일
[1. 2. 3.] float64 # 정수형이 실수형으로 통일
ndarray 타입변환
위에서 float형 데이터를 int형으로 바꾸면 메모리절약을 크게할 수 있다고 했다. 이처럼 타입은 .astype으로 바꾸는 것이 가능하다.
코드
array_int = np.array([1, 2, 3])
array_float = array_int.astype('float64')
print(array_float, array_float.dtype)
array_int1= array_float.astype('int32')
print(array_int1, array_int1.dtype)
array_float1 = np.array([1.1, 2.1, 3.1])
array_int2= array_float1.astype('int32')
print(array_int2, array_int2.dtype)
출력결과
[1. 2. 3.] float64
[1 2 3] int32
[1 2 3] int32
위를 보면 astype에 의해 타입이 바뀐 것을 알 수 있다.