몽발개발

Numpy? 그게 뭐에요? 파이썬 초심자들을 위한 numpy 간단소개 본문

파이썬(Python)/머신러닝,딥러닝

Numpy? 그게 뭐에요? 파이썬 초심자들을 위한 numpy 간단소개

집사 몽이 2020. 11. 2. 17:15
반응형

내가 파이썬을 본격적으로 시작한 건 7월부터였다. 지금이 11월초이니 그래봤자 4달밖에 되지 않았다.

 

파이썬 기본 문법들을 익히고, 여러 가지 자료형이 가지는 특징을 공부했었는데, 도대체 어떻게 해야 파이썬 실력을 늘릴 수 있을까? 고민하던 때였다.

 

나는 뇌공학 대학원을 진학할 예정이라 데이터를 다루는 데 익숙해지기 위해서는, numpy와 scipy, pandas와 같은 과학계열 연구자들이 쓰는 라이브러리를 잘 써야 한다고 들었다. 나는 그 말을 들으며 속으로 생각했다. 아니 그래서 numpy가 뭔데요?

 

C언어는 말 그대로 언어다. 영어나 중국어같은. 우리는 살면서 모든 영어단어를 쓰지는 않는다. 실제로 한 번도 쓰지 않은, 영어학원에서 단어외울때나 봤던 단어도 있을 것이다. 외국에 나가서 여행을 할 때, 금융권에서 일할때, IT업계에서 일할 때 쓰는 영어단어의 종류는 다 다를 수밖에 없다. 자신이 하는 일에 필요한 단어가 쓰이는 것이다.

 

Numpy와 Scipy, Pandas 또한 이렇게 특정 데이터를 처리하는 업무를 하는 사람들이 많이 쓰는 단어의 모음집이라고 생각하면 쉽다. 많이 쓰는 기능들을 모아서 쉽고 빠르게, 그리고 간단하게 쓸 수 있게 해주는 library인 것이다.

 

그 중 Numpy는 "행렬계산"을 위한 단어장이다. 딱 이름 자체가 Num(ber) + Py(thon) 으로 보면 느낌이 팍 올것이다.

각기 다른 차원의 숫자행렬을 계산하기 위해 많이 사용되는 것이 numpy라는 library다. 애초에 컴퓨터는 큰 계산기라고 하지 않는가? 그렇기 때문에 이 numpy는 파이썬하는 사람들에게 기초적인 library로 사용되고 있다.

 

Numpy에 무슨 기능이 있는지 간단하게 조금만 알아보자.

 

단어장을 이용하기 위해선 일단 그 단어장을 가져와야 한다. Python에서는 import를 통해 가져온다.

그리고 numpy라고 불러오기엔 이름이 너무 기니까 np로 간단히 네이밍하도록 한다. 굳이 np가 아니고 본인 맘대로 지정해도 되지만, 내생각에 99%는 np로 줄이지 않을까 싶다.

 

numpy를 불러왔고, 불러온 애를 사용하려면 뒤에 . 을 붙이고 기능을 입력하면 된다.

위 사진은 기본적인 .array 라는 기능으로, 행렬을 만드는 기능이다.

뒤에 "1","4",5,8을 리스트형식으로 넣고, float(=소수점을 표현한 숫자형) 으로 지정하여 행렬을 만들었다.

결과로 1차원 vector인 [1., 4., 5., 8.] 을 얻었다. 뒤에 float을 안붙이면 입력한 그대로 저장된다.

"1", "4"는 str형으로, 5,8은 int형으로. 근데 str로 넣을꺼면 숫자연산이 되지 않는다.

그럼 numpy를 쓴 의미가 없다...! Numpy는 계산하려고 쓰는거라 어지간하면 int나 float을 쓴다.

 

참고로 0차원은 scaler, 1차원은 vector, 2차원은 matrix(여러분이 중학교때 배운 그 행렬) 라고 부른다.

그 이상은 지금 알려고 하지 말자. 머리아프다.

 

.dtype을 붙이면 이 numpy가 무슨 형식으로 지정했는지 알 수 있다.

 

.shape를 붙이면 이 행렬의 크기를 숫자형태로 표시해준다. 현재는 길이가 4인 벡터이므로 (4,)가 나왔다.

만약 2x2 형태의 matrix라면 (2,2)라고 나올 것이다.

지금의 행렬 형태가 마음에 안든다면, .reshape를 사용해 형태를 바꿔줄 수 있다. 뒤에 (-1,2)가 무슨 뜻인지 궁금할텐데, 일단 2열로 맞출꺼고, 2열에 맞게끔 행을 조절하라는 소리다. 한마디로 -1이 들어간건 '다른조건에 맞춰서 잘 해주세요' 라는 거다.

길이가 4이니 열을 2개로 맞출꺼면 행도 2개여야 한다. 여기서는 사실상 (-1,2)는 (2,2)로 맞추라는 뜻이 되었다.

 

이해를 돕기 위해 좀더 큰 데이터를 불렀다. np.arange는 일정 간격의 수로 이루어진 행렬을 부른다. 저렇게 arange의 괄호 안에 숫자 하나만 넣으면 자동으로 0부터 그 숫자까지, 간격이 1인 행렬을 생산한다.

np.arange(30)으로 생성된 행렬은 1차원 벡터로, [1,2,3,4,5....28,29,30] 일 것이다.

그걸 .reshape(-1,5)를 실행시켜, 5열로 형태를 재조정하고, 그에 맞게 행의 갯수를 6개로 설정해 2차원 matrix를 생성한 모습을 확인할 수 있다.

 

이 외에도 여러 행렬을 만드는 법이 있지만, 일단 이정도만 알아도 왠만한 데에 적용 가능하다.

 

그럼 이제 이 만들어진 행렬로 계산을 해보자. Numpy는 행렬의 계산을 쉽게 하기 위한 것이라고 말했던 걸 기억해보자.

 

앞에서 만든 0에서30까지 써서 6x5 matrix로 만든 예를 사용해보자. 이 매트릭스를 a라고 지정하였다.

 

기본적인 +계산이다. 방법은 맘에 드는걸로 쓰자. 값을 보면 알겠지만, 각 column(세로방향) 값들의 합을 구했다.

열의 합을 구하고 싶으면 a.sum(axis=1)로 바꾸면 된다.

이 axis는 공통적으로 0이 세로방향, 1이 가로방향이다. axis를 적지 않으면 디폴트로 0이 들어간다.(아마도?)

 

.vstack은 행렬 두개를 세로로 쌓고,

.hstack은 행렬 두개를 가로로 쌓는다.

 

v는 vertical(수직), h는 horizontal(수평)을 뜻한다.

 

사실 이 기능은 별로 안써봤다.ㅎㅎㅎㅎ

.logical_and는 뒤의 조건 두개를 모두 만족시키는 값들을 True로 표시하고 아닌건 False로 표시한다.

예시로 든 매트릭스에선 5보다 크고 20보다 작은 값들이 True로 표시되있는 걸 볼 수 있다.

 

 

어차피 내가 여기서 말한 거 실전에서 쓸 상황이 왔을 때 까먹을 것이다. 그럴때마다 열심히 구글링하면서 하나하나 다시 찾아서 쓰다보면, 당신이 많이 쓰는 기능들은 자연스럽게 손에 익어 외워질 것이다. 언어는 그렇게 배우는 거라 들었다.

 

많이 쓰면, 익숙해지면, 잘 하게 되는 법이다.

 

Numpy가 뭔지도 몰랐던 과거의 나 같은 입문자 분들을 위해 이 글을 남깁니다.

반응형