파이썬 numpy 시작하기
가장 빠르게 습득하는 방법은 직접 해보는 것입니다. 이번 포스팅에서는 파이썬의 수학전용 라이브러리인 numpy를 익혀보겠습니다. 넘파이를 이용해서 1차원 배열인 벡터와 2차원 배열인 행렬을 만드는 방법부터, 배열의 각 원소에 접근하는 방법까지 확인해보겠습니다. 나도 모르는 사이에 넘파이에 익숙해지게 하는 것이 이 포스팅의 목적입니다.
글의 순서
파이썬
넘파이(numpy)
numpy를 이용한 배열 생성
numpy로 간단하게 생성할 수 있는 배열
numpy로 만든 배열에 접근하는 방법
파이썬
파이썬(Python)은 무료이며, 문법이 쉽고 다양한 라이브러리를 가지고 있는 프로그래밍 언어입니다. 파이썬 데이터 분석! 데이터 분석을 위한 코딩언어 파이썬란 포스팅에서 데이터 분석의 관점에서 파이썬이라는 프로그래밍 언어가 가진 특징을 요약해본 적이 있습니다. 이번 포스팅에서는 수학 계산을 위한 프로그래밍 언어의 관점에서 접근해 보겠습니다. 역시나 수학계산 전용 라이브러리인 numpy가 파이썬을 받쳐 주기 때문인데요. 따라하면서 넘파이의 기본 사용법을 익혀보겠습니다.
넘파이(numpy)
numpy는 수학에서 벡터를 담당하는 배열과 행렬을 손쉽게 만들어주며, 이들 배열과 행렬 간의 계산을 빠르게 실행할 수 있게 해주는 파이썬 패키지(=라이브러리)입니다. 넘파이는 Numerical Python의 줄임말로 ndarray라는 다차원 배열을 다루는 객체(object)와 이를 다루는 여러 가지 함수를 제공합니다. 넘파이는 C언어로 작성되어 있는 만큼 빠른 수학계산이 가능합니다. 수치해석, 통계 작업 등에서 진가를 발휘합니다. 머신러닝, 인공지능 분야에서 꼭 필요한 파이썬 패키지가 바로 넘파이입니다.
넘파이는 파이썬을 설치하고 나서 pip install numpy라는 구문으로 설치할 수 있습니다. 애플의 맥을 포함한 리눅스 환경에서는 pip3 install numpy로 설치합니다.
numpy를 이용한 배열 생성
파이썬 넘파이로 배열을 만들다가 나도 모르는 사이에 익숙해지게 하는 것이 이 포스팅의 목적입니다. 그냥 따라해 보는 것이 중요합니다.
실습코드01에는 넘파이의 array라는 함수를 이용하여 1차원 배열과 2차원 배열을 만드는 방법을 나타내었습니다. array() 함수는 리스트를 인자로 받아서 배열을 생성합니다. 1차원 배열을 벡터, 2차원 배열을 행렬이라고 보시면 되겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import numpy as np print('\n-----', '01-1) 1D array-----') vec = np.array([1,2,3]) print(vec) print(type(vec)) print(vec.ndim) print(vec.shape) print(vec.dtype) print('\n-----', '01-2) 2D array-----') mat = np.array([[1,2],[3,4],[5,6]]) print(mat) print(type(mat)) print(mat.ndim) print(mat.shape) print(mat.dtype) print(mat.max(), mat.min(), mat.mean(), mat.sum()) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
----- 01-1) 1D array----- [1 2 3] <class 'numpy.ndarray'> 1 (3,) int32 ----- 01-2) 2D array----- [[1 2] [3 4] [5 6]] <class 'numpy.ndarray'> 2 (3, 2) int32 6 1 3.5 21 |
넘파이로 만든 배열의 정보를 볼 수 있는 기본적인 명령어들을 다음과 같이 정리할 수 있습니다. 넘파이는 max, min, mean, sum과 같이 배열 각 원소들의 최대값, 최소값, 평균값, 합계를 구하는 함수도 제공하고 있습니다.
▶type() : 데이터 타입 확인
▶ndim : 차원의 수
▶shape : 각 차원(행과 열의 차원)의 크기를 튜플로 보여줌
▶dtype : 배열 각 원소의 자료형
▶max(), min(), mean(), sum(): 배열 각 원소의 최대값, 최소값, 평균값, 전체합
numpy로 간단하게 생성할 수 있는 배열
넘파이로 1, 2차원 배열을 간단하게 만드는 방법이 있습니다. 실습코드02에 나타내었습니다.
▶zeros() 함수는 모든 원소가 0인 배열을 만들어주는데, 배열의 크기를 미리 지정해주기만 하면 원하는 형태의 행렬을 모두 0으로 채웁니다.
▶ones()는 zeros() 함수와 같은 방식으로 작동하는데, 각 원소를 1로 채우는 함수입니다.
▶등차수열(arithmetic sequence)을 만들어주는 arrange() 함수도 있습니다. arange(0, 2, 0.5)는 0부터 시작해서 0.5씩 증가시켜가며 2에 최대한 가까운 수가 나올 때까지 순차적으로 수를 배치시키라는 의미입니다.
▶linspace() 함수는 arange() 함수와 유사하지만, 원소 간의 간격 대신 배열의 원소 개수를 입력합니다. linspace(0, 2, 5)는 0부터 2까지 5개의 수를 등간격으로 배치하라는 의미입니다. 0과 2가 포함됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import numpy as np print('\n-----', '02-1) zeros array-----') mat_zeros = np.zeros((3,2)) print(mat_zeros) print('\n-----', '02-2) ones array-----') mat_ones = np.ones((3,2)) print(mat_ones) print('\n-----', '02-3) arithmetic sequence 1-----') vec_seq1 = np.arange(0, 2, 0.5) print(vec_seq1) print('\n-----', '02-4) arithmetic sequence 2-----') vec_seq2 = np.linspace(0, 2, 5) print(vec_seq2) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
----- 02-1) zeros array----- [[0. 0.] [0. 0.] [0. 0.]] ----- 02-2) ones array----- [[1. 1.] [1. 1.] [1. 1.]] ----- 02-3) arithmetic sequence 1----- [0. 0.5 1. 1.5] ----- 02-4) arithmetic sequence 2----- [0. 0.5 1. 1.5 2. ] |
numpy로 만든 배열에 접근하는 방법
넘파이에서도 리스트에서와 비슷한 방법으로 행 또는 열 데이터에 접근할 수 있습니다. 실습코드03은 배열에 접근하는 방법을 보여주고 있습니다. mat라는 2차원 배열이 있을 때, 1행에 접근하는 방법은 mat[0] 또는 mat[0,:], 2행에 접근하는 방법은 mat[1] 또는 mat[1,:]입니다. 만약 1 열에 접근하고 싶다면, mat[:,0], 2열에 접근하고 싶다면 mat[:,1]이라고 쓰면 됩니다.
조건에 맞는 원소들만 출력할 수도 있습니다. mat[mat>21] 이라고 쓰면, 21보다 큰 원소만 추출해서 써 줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import numpy as np mat = np.array([[11,12,13],[21,22,23]]) print(mat) print('\n-----', '03-1) 행에 접근 -----') print(mat[0]) print(mat[0,:]) print(mat[1]) print('\n-----', '03-2) 열에 접근 -----') print(mat[:,0]) print(mat[:,1]) print(mat[:,2]) print('\n-----', '03-3) 조건에 맞는 원소 추출 -----') print(mat[mat>21]) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[[11 12 13] [21 22 23]] ----- 03-1) 행에 접근 ----- [11 12 13] [11 12 13] [21 22 23] ----- 03-2) 열에 접근 ----- [11 21] [12 22] [13 23] ----- 03-3) 조건에 맞는 원소 추출 ----- [22 23] |
마치며 …
이번 포스팅에서는 파이썬의 수학전용 라이브러리인 numpy를 익혀보았습니다. 넘파이를 이용해서 1차원 배열인 벡터와 2차원 배열인 행렬을 만드는 방법부터, 배열의 각 원소에 접근하는 방법까지 확인해보았습니다. 기억하실 넘파이 함수들을 나열해보면 다음과 같습니다.
▶np.array() : 배열 생성
▶type() : 데이터 타입 확인
▶ndim : 차원의 수
▶shape : 각 차원(행과 열의 차원)의 크기를 튜플로 보여줌
▶dtype : 배열 각 원소의 자료형
▶max(), min(), mean(), sum(): 배열 각 원소의 최대값, 최소값, 평균값, 전체합
▶zeros(), ones(), arange(), linspace() : 간단하게 생성해보는 1, 2차원 배열
▶배열에 접근하기 위해 리스트와 마찬가지로 인덱싱, 슬라이싱 가능
함께 참고하면 더 좋은 글 :
▶ 파이썬 numpy로 선형대수 학습 준비
▶ 파이썬 반복문 속도를 빠르게 하는 방법 : python for 문과 timeit()
▶ 파이썬 바이낸스 API로 비트코인 투자 백테스팅 : 일중 강도(II) 매매 전략
▶ 파이썬 프로그래밍 시작 (6) 반복문
▶ 파이썬 프로그래밍 시작 (7) 반복문과 무한루프
▶ 파이썬 데이터 분석! 데이터 분석을 위한 코딩언어 파이썬
▶ 파이썬 IDE 설정. 비주얼 스튜디오 코드(Visual Studio Code, VS code)
▶ 파이썬 프로그래밍 시작하기 (1) 온라인 프로그래밍 환경 리플릿(replit)
참고자료
[1] 김동권. (2016). 파이썬 소개 Ⅵ(Numpy). 설비저널, 45(4), 110-113.
[2] 김황후(2020), 파이썬 증권 데이터 분석, 한빛미디어
쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.