넘파이(NumPy) : Numerical Python
NumPy가 제공하는 기능은 다음과 같다:
- 빠르고 메모리 효율적인 벡터 연산과 세련된 브로드캐스팅 기능을 제공하는 다차원 배열인 ndarray
- 반복문을 작성할 필요 없이 전체 데이터 배열에 대해 빠른 연산을 제공하는 표준 수학 함수
- 배열 데이터를 디스크에 쓰거나 읽을 수 있는 도구와 메모리에 올려진 파일을 사용하는 도구
- 선형대수, 난수 발생기, 푸리에 변환 기능
- C, C++, 포트란으로 쓰여진 코드를 통합하는 도구
특히 마지막 기능으로 C API를 제공하여 저수준으로 씌여진 외부 라이브러리(c로 만들어진 openCV 등)를 쉽게 사용할 수 있도록 해준다.
NumPy는 고수준의 데이터분석 기능을 제공하지 않으나,
- 데이터를 array라는 연속된 메모리 공간에 저장하고,
- array라는 메모리 블럭 단위의 연산을 사용하도록 하여,
- 큰 규모의 데이터 연산을 빠르게 수행할 수 있도록 해줄 뿐 아니라,
- deep learning 이후 각광받고 있는 GPGPU를 통한 고속 연산 처리에 바로 적용할 수 있어,
- python 계열의 데이터분석, 데이터저장, 머신러닝, AI 도구들이 공통적으로 활용하여
- 데이터 객체인 ndarray와 이 객체의 메소드를 확장하여(상속하여) 구현하고 있다.
따라서, 고수준의 여러 python 계열의 분석 도구를 활용하려면, 그 기반이 되는 NumPy를 정확하게 이해하고 있어야 제대로된 분석이 가능하다.
고수준의 여러 python 계열의 분석 도구들이 주요하게 사용하는 기능은:
- 벡터 배열상에서 데이터 개조, 정제, 부분 집합, 필터링, 변형, 다른 종류 연산의 빠른 수행
- 정렬, 유일 원소 찾기, 집합연산 같은 일반적인 배열 처리 알고리즘
- 통계의 효과적인 표현과 데이터의 수집/요약
- 다른 종류의 데이터 묶음을 병합하고 엮기 위한 데이터 정렬과 데이터 간의 관계 조작
- if-elif-else를 포함하는 반복문 대신 사용할 수 있는 조건절을 표현할 수 있는 배열 표현
- 데이터 그룹 전체에 적용할 수 있는 수집, 변형, 함수 적용 같은 데이터 처리.
1. 넘파이 사용하기
import numpy as np
import를 통해서 넘파이 모듈을 추가할 수 있습니다.
as 를 통해 앞으로 소스에서 부를 때 별칭인 np로 호출할 것입니다.
2. array() -> 파이썬의 리스트와 같은, 배열
array1 = np.array([1,2,3])
print(type(array1)) # array1의 타입 출력
print(array1.shape) # array1의 형태(3,)
array2 = np.array([[1,2,3],[4,5,6]])
print(type(array2)) # array2의 타입 출력
print(array2.shape) # array2의 형태(2,3)
print('array1: : {.0}, array2 : {.2}'.format(array1.ndim, array2.ndim))
.type () : 변수에 대한 타입을 알 수 있는 함수로 결과값은 <class 'numpy.ndarray'>로 나오게 된다
.shape() : ndarray의 크기, 즉 행과 열의 수를 튜플 형태로 가지고 있으며, 배열의 차원을 알 수 있음
- array1 은 데이터 3개가 있는 1차원 배열이므로 (3,)가 나오게 된 것이고, array2 는 데이터가 1차원인 [1,2,3], [4,5,6] 이 두개인 2차원 배열이므로 (2,3)이 나오게 됩니다.
.ndim : 각 배열의 차원을 알 수 있는 함수
* 파이썬과 넘파이 비교
list1 = [1,2,3]
print(type(list1))
array1 = np.array([1,2,3])
print(type(array1))
print(array1.dtype)
- list1에 대한 type() 함수 -> <class 'list'>
- array1 에 대한 type() 함수 -> <class 'numpy.ndarray'>
* ndarray의 의미는 n-dimensional array(다차원 배열)의 약자이다.
즉, 파이썬의 리스트와 넘파이의 array는 다른 것으로 확인 할 수 있다. 넘파이를 사용하기 위해서는 파이썬의 데이터타입을 넘파이에서 처리하는 타입으로 변환이 필요하다.
- dtype : ndarray내의 데이터 타입을 확인 할 수 있는 함수로 결과는 int32 -> 모두 정수타입의 32비트임을 나타낸다. 정수와 실수가 섞여 있으면 가장 큰 데이터 타입을 따라가기 때문에 float64가 나오게 된다.
* 자료형, dtype은 ndarray가 특정 데이터를 메모리에서 해석하기 위해 필요한 정보를 담고 있는 특수한 객체다.
산술 데이터의 dtype은:
- float, int 같은 자료형의 이름과
- 하나의 원소가 차지하는 비트 수로 이루어진다.
- 예: float64 => 소수를 64bit 메모리 공간을 담는 data type.
종류Type Code설명
int8, uint8 | i1, u1 | 부호가 있는 8비트(1바이트) 정수형과 부호가 없는 8비트 정수형 |
int16, uint16 | i2, u2 | 부호가 있는 16비트 정수형과 부호가 없는 16비트 정수형 |
int32, uint32 | i4, u4 | ~ |
int64, uint64 | i8, u8 | ~ |
float16 | f2 | 반정밀도 부동소수점 |
float32 | f4 또는 f | 단정밀도 부동소수점, C언어의 float과 호환 |
float64 | f8 또는 d | 배정밀도 부동소수점, C언어의 double형과 파이썬 float객체와 호환 |
float128 | f16 또는 g | 확장 정밀도 부동소수점 |
complex64/128/256, | c8, c16, c32 | 각각 2개의 32, 64, 128비트 부동소수점형을 가지는 복소수 |
bool | ? | True, False를 저장하는 불리언형 |
object | 0 | 파이썬 객체형 |
string_ | S | 고정길이 문자열형(각 글자는 1바이트). 길이가 10인 문자열의 dtype = S10 |
unicode_ | U | 고정 길이 유니코드형(OS에 따라 글자별 바이트수 다름) string_과 같은형식(ex) U10) |
array_int = np.array([1,2,3]) # 기본 배열 형태
array_float = array_int.astype('float64') # 타입 변환
print(array_float.dtype)
- .astype() : ndarray내 데이터 값의 타입 변경하는 함수
-> 정수로 들어간 array_int 는 float형태로 변환되어 출력값이 [1. , 2. , 3. ] 된다.
'머신러닝 in Python' 카테고리의 다른 글
판다스(Pandas) 데이터프레임 활용 (0) | 2019.08.08 |
---|---|
판다스(Pandas) 기초 + 타이타닉 데이터 (0) | 2019.08.08 |
넘파이(NumPy) 정렬 (0) | 2019.08.07 |
넘파이(NumPy) 인덱싱(indexing) (0) | 2019.08.07 |
넘파이(NumPy) ndarray (0) | 2019.08.07 |