기술적인 내용을 구글에 검색해보면 수많은 개인 블로그들이 나온다. 내용들을 보면 충실하게 잘 작성된 블로그도 있지만, 누가 먼저 작성했는지 출처가 의문인 내용의 포스팅이 상당히 많다. 물론 개인의 메모장 정도로 활용해서 그렇게 작성했을 수도 있지만 모두가 볼 수 있는 공개적인 공간에 타인의 창작물을 베껴다 올려놓는 건 좀 아니지 않나? 출처도 안 밝히고 휴
포스팅을 시작하려다갑자기 든 생각이다.
지금부터 파이썬의 NumPy라는 패키지를 구석구석 살펴볼 예정이다. 머신러닝을 공부하기 위해서는 NumPy가 필수인 것 같다. 그럼 시작해보자.
NumPy란?
NumPy는 "Numarray"와 "Numeric"이라는 아주(?) 오래된 Python 패키지를 계승해서 나온 수학 및 과학 연산을 위한 파이썬 패키지다. Py는 파이썬을 의미한다. Num + Py = NumPy 이 정도로 이해하면 될 것 같다. 우리는 이 패키지를 보통 '넘파이'라고 읽는다.
넘파이는 기본적으로 배열을 기본으로 해 데이터를 처리한다. 1차원, 2차원 3차원 배열로 수치해석, 통계, 푸리에 변환, 행렬 등 다양한 수학 연산을 제공한다. 이 말은 머신러닝을 학습하기 위해서는 반드시 알아두어야 하는 패키지라는 것이다. 넘파이는 Scipy, Pandas, matplotlib 등 수학 및 과학 연산을 위한 패키지와 함께 조합해 사용되는 경우가 많다.
나무위키 내용을 참고해 작성했다.
NumPy 시작하기
포스팅은 NumPy의 공식 홈페이지의 내용을 바탕으로 작성할 것이다.
https://numpy.org/doc/stable/index.html
넘파이를 사용하기 위해서는 설치를 해야 한다.
1. pip install numpy
2. conda install numpy
터미널 창에 1번과 같이 입력하면 넘파이가 설치된다. (여기서 말하는 터미널 창은 VSC 또는 파이썬 터미널 창을 의미한다.) conda에서는 2번과 같이 입력한다. 난 이미 설치해서 설치되어 있다고 나온다.
넘파이를 사용하기 위해서는 넘파이를 가져와야한다.
import numpy as np
넘파이를 가져오고 np로 대체하겠다는 의미다. as np 없이 numpy를 그대로 사용해도되지만 넘파이 가이드 문서에는 numpy를 사용하는 대신 np를 사용하는 것이 관례라고 말하고 있다. 세계적인 룰을 따르는 것이 좋을 것 같다.
여기까지 하면 시작 준비 끝!
NumPy를 이용해 배열 만들기
넘파이에서 연산은 배열을 기본으로 한다. 모든 연산이 배열로 이뤄진다. 배열을 만드는 방법을 알아보자!
1. np.arange()
np_arr = np.arange(6)
np_arr 변수를 선언하고 0부터 5까지 숫자 6개를 요소로 갖는 배열을 선언하겠다는 의미다. 파이썬의 range와 유사한 동작형태를 보인다. arange() 매소드 매개변수에 전달하는 숫자만큼의 크기를 갖는 배열이 생성되고, 인덱스와 요소 값의 값이 같다.
2.1 np.array() - 1차원 배열
내가 원하는 값을 요소 값으로 하는 배열을 만들고 싶으면 .array() 매소드를 이용하면 된다. 아래 코드는 1차원 배열을 생성한다.
arr = np.array([1, 2, 3, 4, 5])
각 요소 값의 사용은 list의 사용법과 동일하다. 아래와 같이 입력하면 배열 arr의 0번째 인덱스의 요소 값을 사용할 수 있다.
arr[0]
2.2 np.array() - 2차원 배열
2차원 배열을 생성하기 위해서는 다음과 같이 한다.
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
.array() 매소드에 2차원 배열을 전달하면 된다. [ [0행], [1행], [2행], [3행], [4행] ,[5행] .... [] ]
각 요소 값의 사용은 arr[행 번호][열 번호] 또는 arr[행 번호, 열 번호] 이와 같이 사용 가능한다.
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[1][2])
8
print(arr[1, 3])
9
2.3 np.array() - 3차원 배열
2*3*4 배열 생성이다. 3차원 배열은 의 첫 번째 괄호는 '면'이고, 두 번째 괄호가 '행', 세 번째 괄호가 '열'을 의미한다.
arr = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]],
[[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]])
각 요소의 사용법은 2차원 배열과 유사하다. arr[면][행][열] 또는 arr[면,행,열] 이와 같이 사용 가능하다.
arr = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]],
[[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]])
print(arr[0][2][3])
12
3. 파이썬의 list, tuple, dictionary를 넘파이 배열로 변환하기
파이썬의 list, tuple, dictionary는 배열과 유사한 형태를 보이는 자료형이고 .array() 매소드를 이용하면 파이썬의 list, tuple, dictionary를 배열로 변환할 수 있다.
3.1 list, tuple을 넘파이 배열로 변환하기
파이썬의 list를 넘파이로 배열하는 방법은 아래와 같다.
lst = [1, 2, 3, 4, 5]
lst_to_arr = np.array(lst)
리스트를 .array() 매소드의 매개변수에 전달해주면 끝이다. 여기서 주의할 점은 배열은 자료형을 혼합할 수 없다는 점이다. 파이썬의 list는 자료형의 혼합을 허용하지만 넘파이의 배열은 자료형의 혼합을 허용하지 않는다. 쉽게 말해 숫자와 문자를 섞어서 하나의 배열에 담을 수 없다는 의미다.
lst = [1, 2, 3, 4, 5, 'a']
lst_to_arr = np.array(lst)
위와 같이 lst 마지막 요소에 문자열 'a'가 들어가 있는 list를 배열로 변환하면 문자열 배열로 변환되는 것을 확인할 수 있다. 주의해야 한다.
2차원, 3차원 list도 동일한 방법으로 배열로 변환할 수 있다. tuple도 list를 배열로 변환하는 방법과 동일하다.
3.2 dictionary를 넘파이 배열로 변환하기
dictionary는 key와 value 구성되어있다. dictionary의 key와 value값이 모두 숫자 또는 문자열로 통일되어 있다면 배열로 변환해 사용해도 문제가 없겠지만 숫자와 문자열이 혼합된 경우는 사용을 하지 않는 것이 좋을 것 같다. 학습 차원이니 변환하는 방법에 대해 알아보도록 하자!
dictionary를 넘파이 배열로 변환하기 위해서는 우선 dictionary를 list로 변환해주어야 한다.
dict = {1:10,
2:20,
3:30}
dictitems = dict.items()
.items() 메서드를 이용하면 key와 value가 tuple로 묶인 형태의 list가 만들어진다. .items() 메서드는 dict_items객체로 반환하기 때문에 반환된 객체를 다시 list로 바꿔줘야 한다.
dictlst = list(dictitems)
이렇게 바꾼 list를 다시 배열로 변환한다.
dictarr = np.array(dictlst)
위 과정을 코드 한 줄로 요약할 수 있다.
dictarr = np.array(list(dict.items()))
여기까지 배열을 만드는 방법과 배열의 요소 값을 사용하는 방법, 그리고 파이썬이 list, tuple, dictionary를 배열로 변경하는 방법을 알아보았다. 다음 포스팅에서는 배열 요소 추가, 제거 및 정렬 등에 대해 알아보도록 하겠다!
- 끝 -
'Programming language > Python' 카테고리의 다른 글
[Python-NumPy] 4.NumPy.reshape (0) | 2022.03.02 |
---|---|
[Python-NumPy] 2.NumPy.sort() 정렬 (0) | 2022.03.02 |
[Python-개발환경] 가상환경이란? VSC에서 가상환경 설정하기 (0) | 2022.02.17 |
오늘의 파이썬_[자료형] 리스트, list, 파이썬 list (0) | 2021.08.30 |
[Python-개발환경]Python파이썬 가상 환경(.venv) 보안 오류 (2) | 2021.06.15 |