안녕하세요, Davey 입니다. 오늘은 개발자들이 정말 많이 사용하고, Deep Learning, 정교한 수계산에도 많이 이용되는데, numpy 에대해서 간단하게 설명 드리겠습니다. 하나의 Posting 으로는 모든 걸 설명 드릴 수 없어서, 여러개의 Posting을 통해서, 설명 해드리도록 하겠습니다.
1. Numpy 란 무엇인가?
[ 참조 자료 : https://ko.m.wikipedia.org/wiki/NumPy]
: NumPy("넘파이"라 읽는다)는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬의 라이브러리이다. NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공한라고, WIKIPEDIA에서 설명하고 있습니다.
- 현재, python 에서 기본적으로 제공하는 기능 중에, 행렬이나 다차원을 구현 할 수 있는 라이브러리로서, List, Tuple, Dictionary가 있습니다. 이 중에서 비교하기에는 list 가 적당하다고 생각합니다.
- 일단, list 보다는 python 내부에서 구현하는 속도가 빠릅니다. 그리고 메모리를 적게 사용합니다. 선형 대수, 통계 관련 여러 함수 내장하고 있어서 편리 합니다.
(C언어로 구현되어 있음)
- Vectorization 컨셉을 사용하기 때문에 속도가 List 함수보다 빠르다.
2. numpy 선언과 활용하기
: 아래 구문과 같이 라이브러리를 선언을 해야 사용이 가능합니다.
- import numpy as np (보통 np라고 하는데, 다른 걸로 명명하셔도 무관합니다. 아래 사진 참조)
- Array 함수 사용 하기
: List 의 기능을 똑같이 구현하는 거라고 생각하시면 됩니다. 말로 설명 드리는 것보다는 예제를 통해서 설명 드리겠습니다.
================================================
import numpy as np
# 1 차원 배열로 구현 test01, test02를 구현
test01 = np.array ([10,20,30])
test02 = np.array ([20,30,40])
================================================
위에 코드를 실행하면 아래와 같은 결과 값을 보실 수 있습니다.
- arange 함수 활용하기
: 일정한 숫자 개수를 지정하여, 한번에 list화 하시는 것으로, 0 부터, 입력하는 수 -1 까지 list화를 시키거나, 범위를 지정하여, list화를 시키는 함수 입니다. 아래와 같이 예제를 통해서 설명 해드리겠습니다.
Case #1 : 0 부터, 입력하는 수 -1 까지 list화
==================================================
import numpy as np
np.arange(20)
==================================================
- 초기에, 변수를 통해 초기값을 입력하는, array와 달리, 선언과 동시에 초기값을 입력하기 때문에 변수가 필요가 없습니다. 위 코드를 실행 시켜보시면 아래와 같은 값을 확인 하실 수있습니다. 즉, 0부터 19까지의 값이 list화 해서, 출력이 됩니다.
Case #2 : 범위를 지정하여, list화
np.arange(1,20)
==================================================
import numpy as np
np.arange(20)
==================================================
- Case #1 은 무조건 0부터 시작하지만, Case #2를 통해서 초기값을 선언을 하면, 0 이 아닌 다른 값 부터 시작하여, 선언과 동시에 초기값을 입력할 수 있습니다. 이 부분도, 따로, 변수가 필요가 없습니다. 위 코드를 실행 시켜보시면 아래와 같은 값을 확인 하실 수있습니다. 즉, 1부터 19까지의 값이 list화 해서, 출력이 됩니다.
Case #3 : 범위를 지정하고, 조건에 맞는 값을 list화
==================================================
import numpy as np
np.arnage(1,20,2)
==================================================
- Case #2 의 방법대로, 범위는 정하지만, 일정한 조건 "2" 를 입력하여, 원하는 값을 선택적으로 list화 할 수 있는 방법입니다. "2" 라는 의미는, 2칸씩 띄어서, 입력하라는 거죠, 즉, 1 다음에 2 가 아니라, 2칸은 띄운, 3 이 출력이 되는 거죠, 그래서 이 조건으로, 1,3,5,7,9,11,13,15,17,19가 나오게 됩니다. 위 코드를 실행 시켜보시면 아래와 같은 값을 확인 하실 수있습니다. 즉, 앞에 애기 드린 것처럼, 1,3,5,7,9,11,13,15,17,19이, 출력이 됩니다.
- ones, zeros 함수 활용하기
: 선언한 행렬에, 일괄적으로 "1" 을 입력하거나, "0" 을 입력하고 싶을 때 사용하는 함수입니다. 간단한 사항이니 아래와 같이 간단하게 예를 통해서 설명 드리도록 하겠습니다.
==================================================
import numpy as np
np.ones((2,2)) # 2차원 배열 2x2 행렬에 모든 행렬 값을 1로 입력하는 것
np.ones((2,3,4)) # 3차원 배열 2x3x4 행렬에 모든 행렬 값을 1로 입력하는 것
==================================================
- 위의 코드를 실행 시켜보시면, 아래와 같이 모든 값에 "1" 이 입력되어 지는 걸 보실 수 있습니다.
==================================================
import numpy as np
np.zeros((2,3,4)) # 3차원 배열 2x3x4 행렬에 모든 행렬 값을 0 을 입력하는 것
==================================================
- 위의 코드를 실행 시켜보시면, 아래와 같이 모든 값에 "0" 이 입력되어 지는 걸 보실 수 있습니다.
- random, rand, randn, randint 함수 활용하기
: 선언한 행렬 안에 입력되는 값을 random 한 값을 입력하는 함수이다. 크게 3가지로 나뉩니다. 3가지에 대해서 하나 하나 설명 해드리겠습니다.
Case #1 : 실수 값을 Random하게 입력하는 함수입니다. 쉬운 이해를 돕기 위해, 아래와 같이 간단하게 예를 통해서 설명 드리도록 하겠습니다.
=============================================================
import numpy as np
np.rand (5,5) # 2차원 5x5 행렬의 값을 양수 실수 값으로 random하게 입력하는 함수
=============================================================
- 위의 코드를 실행 시켜보시면, 아래와 같이 모든 값에 양수 실수 값으로 random하게 입력되어 지는 걸 보실 수 있습니다.
Case #2: 정수 값을 Random하게 입력하는 함수입니다. 쉬운 이해를 돕기 위해, 아래와 같이 간단하게 예를 통해서 설명 드리도록 하겠습니다.
=============================================================
import numpy as np
np.randn (5,5) # 2차원 5x5 행렬의 값을 양수 음수 실수 값으로 random하게 입력하는 함수
=============================================================
- 위의 코드를 실행 시켜보시면, 아래와 같이 모든 값에 양수 음수 실수 값으로 random하게 입력되어 지는 걸 보실 수 있습니다.
Case #3: 정수 값을 Random하게 입력하는 함수입니다. 쉬운 이해를 돕기 위해, 아래와 같이 간단하게 예를 통해서 설명 드리도록 하겠습니다.
=============================================================================
import numpy as np
np.random.randint(-5,5,size =(2,5))
# -5 에서 5까지 범위를 정하고, 행렬 형태(2x5)를 선언하고, 행렬의 값은 정수값으로 random하게 입력함
=============================================================================
- 위의 코드를 실행 시켜보시면, 조건에 맞게, 아래와 같이 모든 값에 정수 값으로 random하게 입력되어 지는 걸 보실 수 있습니다.
- 그러면 이 부분만 실수 값을 일부로 입력하면 아래와 같이 출력이 됩니다. 입력과 출력을 아래 동시에 보여드리도록 하겟습니다.
=============================================================================
import numpy as np
np.random.randint(-5.56,5,size =(2,5))
# -5 대시 실수 값 -5.56을 일부러 입력하여 결과 값을 확인함.
=============================================================================
- 위 코드를 실행하면, 아래와 같이 -5 부터 입력이 되는 걸 확인 하실 수 있습니다. 즉, randint를 사용하게 되면, 실수 값의 범위를 적용하더라도, 그 범위에 있는 정수만 나열하는 걸 확인 하실 수 있습니다.
이상입니다. numpy 자체가 너무나도 많이 이용하며, numpy가 가지고 있는 함수 자체가 너무나도 다양하고, 많아서, 한번에 posting하기에는 애매할 거 같아서, 여러 part로 나눠서 posting할 예정입니다. 제 예상에는, 2~3 개 아니면 max 4개 까지는 될 거 같습니다. 무튼, 최대한 자세히 posting해서 서로 서로 도움이 되는 내용이 되도록 하겠습니다. 그럼 파이썬으로 최고의 프로그래머가 되는 그날 까지 같이 성장하시죠! 감사합니다.
제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다.
[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]
댓글