본문으로 바로가기

요즘 약간 신나게 일하는 기간은 아닌 모양입니다. 경기는 너무 나쁘고... 덩달아 월급쟁이인 저도 힘들고..ㅠㅠ. 뭐 그래서 약간 바쁜척 하느라 또 이러저리 시간이 지나가네요.ㅠㅠ. 꿈같은 괌을 다녀오고 [바로가기] 아직 괌 앓이 중이랍니다.^^

최근에 저는 Python을 공부한다고... (사실 최근이 아니라 아주 예전에.ㅠㅠ) 했었는데요... 요근래 IPython을 설치하는 법을 이야기했었죠.[바로가기] 이제 그 환경에서 numpy라는 아이에 대해 이야기를 할려고 합니다. numpy의 기초나 역사 그 어마어마한 기능까지 뭐 제가 다~~~ 이야기하기에는 전 너~~~무 초보이기때문에.. 그냥 언제나 그렇듯 제가 공부하거나 신기해했던 것을 이야기할까 합니다. 사실 이 내용은 GitHub에 있는 Python Numpy 기초 강좌 예제를 그냥 따라했던 것 뿐이랍니다.^^.



어디 어디 강좌 예제 등등을 다운받아 들여다 봐도 항상 numpy의 namespace는 np로 많이들 쓰는듯 하더군요.^^



먼저 numpy가 제공하는 기초 함수들 중 MATLAB에서도 제가 많이 봤던 아이들이 있더군요. 1로 채워진 정해진 크기의 행렬(배열)을 만드는 ones0으로 채워지는 zeros단위행렬을 만들어주는 eye가 있더군요^^ 살짝 방갑기도 하고^^



그리고, np.array를 이용해서 직접 행렬(배열)을 만들어 둘 수 있습니다. 그 크기를 알고 싶으면 shape데이터 형을 알고 싶으면 dtype을 이용하면 되구요.



그리고 데이터형을 변경하고 싶으면 astype을 사용하면 되구요. 또 배열을 선언할때 dtype 속성으로 데이터형을 지정할 수도 있습니다.



물론 일반 연산자를 사용해서 배열간 연산이 가능한데요. 곱하기(*) 기호는 각 요소별 곱을 수행하구요. (행렬의 곱이 아닙니다.) + 덧셈 기호로 스칼라 값을 더해도 각 요소에 모두 더합니다. 나눗셈도 마찬가지구요^^



그리고 ** 곱하기 기호를 두 번 연달아 적으면 제곱승이 됩니다. 위 16번 줄의 명령은 data1의 각 요소에 루트를 씌우라는 말입니다. 17번 명령은 **2는 ^2와 같은 결과구요. 모두다 각 요소를 각각 연산합니다.



또한 등간격의 숫자 배열을 지정할 수 있는 arange()명령이 있구요. 이에 따라 각 위치별로 잘라서 보거나 저장할 수 있습니다. 특이한 것은 22번 명령인데요. numpy 배열로 선언된 변수의 특정 구간을 다른 이름으로 저장해서 그 변수의 내용을 수정하면 원본도 같이 수정되더군요. 흠... 편한듯 하면서도 다른 언어 사용자들은 조심하셔야할 듯 합니다.^^



이렇게 가로 세로 위치를 이용해서 데이터 내용을 확인할 수 있구요. 또 MATLAB 유저라면 이해가 편하실텐데..  (:) 연산자를 사용해서 범위를 지정할 수도 있습니다.



특히 위 내용처럼 [:2, 1:]의 의미는 처음부터 2번행 직전까지의 행과, 1번 열 부터 끝 열까지라는 의미입니다. 정확하게는 29번 명령을 보시면 됩니다.

또 어설픈.. 기초이야기를 시작하네요. ㅎㅎ. 많은 분들은 아니지만... 이런 저런 분들이 오시는 블로그에 이렇게 공부하는 내용을 올리다니.. 저도 참 황당한 일입니다.^^. 그런데 희한하게 이렇게 올리고 나면 이 지식이 이제사 비로서 내 지식이 된듯한 착각(^^)이 있습니다.ㅠㅠ. 뭐 아무튼 그렇다구요^^


신고