넘파이(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. ] 된다.

 

 

+ Recent posts