파이썬의 지향점은 '간단한 코딩' 이다. 하지만 list만으로 데이터를 정제하기에는 무리가 있고, 이러한 요구사항을 충족하기 위해 numpy나 pandas같은 라이브러리들이 존재한다.
numpy에 대해 알아보자.
● Numpy란?
까마득한 고등학생 시절 배웠던 배열을 구현하기 위한(편한) 라이브러리
기존 파이썬의 리스트는 for문을 통해 계산하는것과 같이 복잡한 과정이 필요했지만, numpy 활용으로 인해 리스트끼리의 간단한 계산이 가능하다.
import numpy as np
로 불러올 수 있고 배열간의 직접 계산이 가능하다.
a = np.array([1, 2, 3, 0, 0])
print(a)
>> array([1, 2, 3, 0, 0])
b = np.arange(4)
print(b)
>> array([0, 1, 2, 3, 4])
c = a + b
print(c)
>> array([1, 3, 5, 3, 4])
이는 배열을 직접 지정하여 바로 계산하는 모습.
일반 list 형태였다면 for문을 통해 list n번째의 값을 꺼내서 각자 더해야하지만, numpy 덕분에 직접적인 계산이 가능하다.
- 어떻게 배열 형태를 출력 가능한지 확인하자.
a = np.array([['a','b','c'],['d','e','f'],['g','h','i']])
a[0,1]
>> 'b'
a[:,[0,1]]
>> array([['a', 'b'],
['d', 'e'],
['g', 'h']], dtype='<U1')
a[[0,1,2],[0,1,0]]
>> array(['a', 'e', 'g'], dtype='<U1')
첫 줄에서 선언한 a의 경우,
[[ a, b, c],
[ d, e, f],
[ g, h, i]]
의 형태를 하고 있을 것이다.
a안의 요소를 검색하고 싶은 경우,
[[ 0,1,2],
[ 0,1,2],
[ 0,1,2]]
와 같이 검색이 가능하다.
검색 순서는 [axis = 0, axis = 1]의 조건이다.
* axis = 0 은 행 순서 기준, axis = 1 은 열 순서 기준 *
- numpy 팁
np.array([리스트]) = 파이썬에서 만들어준 리스트를 numpy배열로 만든다.
이때 만들어준 np의[ ]안에는 조건문도 들어갈 수 있다. np에서 true인 경우에 출력도 가능하니 true, false인 경우에는 출력도 가능.
np.ndim(‘배열이름’) = 배열의 차원을 확인한다. (number dimension)
a.shape = 배열 형태를 확인한다.(차원 개수만큼 수를 적용하여 튜플로 표시한다.)
a.dtype = 요소들의 자료형을 확인한다.(dimension type)
a.reshape(a,b) = 다른 형태의 배열로 바꾼다.
ex) np.array([[1,2,3],[4,5,6]])의 (2,3) 형태에서 = 배열로 칸이 줄어들어 수가 없어지는 경우는 불가.
np.reshape(3,2)로 (3,2)의 형태 변환 가능, np.reshape(6,1)로 (6,1)의 변환 가능.
reshape(a,-1) 지정하면 현재 array의 최대 개수가 몇개인지 몰라도 끝번호에 맞춰줘서 변환이 용이하다.
numpy 조사를 하며 위키백과를 살짝 들여다보니 선형대 수학, 최근접 이웃 과 같은 아직 보기 힘든 자료들이 여럿 있었다. 언젠간 나도..!