🎱 Numpy
- Numpy
- Numerical Python
- 수와 관련된 Python 도구
- Numpy가 중요한 이유
- numpy 배열(numpy array) 제공
- Python 리스트와 유사
- 일반 Python 코드로 처리하기 어려운 대용량 데이터 처리 용이
- 행렬과 이차원 배열 활용
🎱 Numpy Array의 생김새
import numpy
array1 = numpy.array([2, 3, 5, 7, 11, 13, 17, 19, 21, 23])
type(array1)
numpy.ndarray
- numpy 모듈 불러오기
- numpy 모듈의 array 함수 활용
- 파라미터: Python 리스트
- array1의 자료형: numpy.ndarray
array1.shape
(10, )
array2 = numpy.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
array2
array2.shape
array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12]])
(3, 4)
- ndarray
- n-dimensional array
- n차원 배열
array1.size
array2.size
10
12
🎱 Numpy Array를 만드는 다양한 방법
- Python list를 통해 생성
- numpy 모듈의 array 메소드에 파라미터로 Python list를 넘겨주기
array1 = numpy.array([2, 3, 5, 7, 11, 13, 17, 19])
print(array1)
[2 3 5 7 11 13 17 19]
- 균일한 값으로 생성
- numpy 모듈의 full 메소드
- 모든 값이 같은 numpy array 생성 가능
array1 = numpy.full(3, 4)
print(array1)
[4 4 4]
array1 = numpy.full(4, 0)
array2 = numpy.zeros(4, dtype=int)
print(array1)
print()
print(array2)
[0 0 0 0]
[0 0 0 0]
array1 = numpy.full(4, 1)
array2 = numpy.ones(4, dtype=int)
print(array1)
print()
print(array2)
[1 1 1 1]
[1 1 1 1]
- 랜덤한 값들로 생성
- numpy의 random 모듈의 random 함수 사용
array1 = numpy.random.random(4)
array2 = numpy.random.random(4)
print(array1)
print()
print(array2)
[0.46484312 0.78945153 0.14785236 0.98756213]
[0.25469853 0.46316987 0.13575436 0.94358123]
- 연속된 값들이 담긴 numpy array 생성
- numpy 모듈의 arange 함수 사용
- arange 함수
- python의 기본 함수인 range와 유사
- 파라미터 1개: 0부터 n-1까지의 값
- 파라미터 2개: m부터 n-1까지의 값
- 파라미터 3개: a부터 b-1까지의 값들 중 간격이 c인 값
# 파라미터 1개
array1 = numpy.arange(5)
print(array1)
# 파라미터 2개
array1 = numpy.arange(3, 6)
print(array1)
# 파라미터 3개
array1 = numpy.arange(2, 11, 2)
[0 1 2 3 4]
[3 4 5]
[2 4 6 8 10]
🎱 모듈 별명 지어주기
- 모듈 별명(alias) 지어주기
import numpy as np
import matplotlib.pyplot as plt
🎱 인덱싱, 슬라이싱
- 인덱스
- list나 array에서 몇 번째 자리인지 나타내는 값
- 0번부터 시작
- 인덱싱
- 인덱스를 이용해서 해당 위치에 있는 값을 받아오는 것
array1[0]
- 음수 인덱스도 가능
- 리스트 인덱싱
array[[1,3,5]]
- 결과:
array([1번 인덱스 값, 3번 인덱스 값, 5번 인덱스 값])
array2 = np.array[[1,3,5]]
array1[array2]
array([1번 인덱스 값, 3번 인덱스 값, 5번 인덱스 값])
array1[0:5]
array1[:5]
array1[3:]
array1[:5:2]
array([0번 인덱스 값, 1번 인덱스 값, ..., 4번 인덱스 값])
# 동일한 결과
array([3번 인덱스 값, ..., 마지막 인덱스 값])
array([0번 인덱스 값, 2번 인덱스 값, 4번 인덱스 값])
🎱 Numpy 기본 연산
array1 = np.arange(6)
array1
array1 = array1 * 2
array([0, 1, 2, 3, 4, 5])
array([0, 2, 4, 6, 8, 10])
for i in range(len(array1)):
array1[i] = array1[i] * 2
array1 = np.arange(6)
array2 = np.arange(6, 11)
array1 + array2
array([6, 8, 10, 12, 14, 16])
🎱 Numpy 불린 연산
array1 = np.array([2,4,6,8,10])
array1 > 5
array([False, False, True, True, True])
booleans = np.array([True, False, False, True, True])
np.where(booleans)
(array([0, 3, 4]),)
- 응용
- 조건식에 대해 True가 담긴 인덱스만 골라내기
- 결과적으로, 조건에 해당하는 값만 필터링 할 수 있다
- 리스트 안에 불린 리스트가 들어가면 불린 값이 True인 인덱스의 데이터만 추출한다
filter = np.where(array1 > 4)
filter
array1[filter] # 리스트 인덱싱
(array([2, 3, 4],)
array([6, 8, 10])
🎱 Numpy Array vs. Python List
- 문법 차이
- 덧셈 연산 결과
- array + 정수 >> 각 요소에 더한 값 / 리스트 + 정수 >> 에러
- 곱셈 연산 결과
np.array([1, 2, 3]) + np.array([4, 5, 6])
[1, 2, 3] + [4, 5, 6]
np.array([1, 2, 3]) * 3
[1, 2, 3] * 3
array([4, 7, 9]) # 값이 더해진다
[1, 2, 3, 4, 5, 6] # 리스트가 이어진다
array([3, 6, 9]) # 값이 곱해진다
[1, 2, 3, 1, 2, 3, 1, 2, 3] # 요소를 반복한다
- 성능 차이
- Python list
- 자료형 상관 없이 담을 수 있다
- 처리 속도 Down
- numpy array
import numpy as np
from timeit import time it
x = np.arange(100000000)
y = list(range(100000000))
timeit(lambda: x * 2, number=1)
timeit(lambda: [n * 2 for n in y], number=1)
numpy >> 0.4초
리스트 >> 6.6초
- 사용 팁
- Python
- Numpy
- 수치 계산이 많고 복잡할 때
- 다차원 배열(행렬) 활용할 때
🎱 Numpy 기본 통계
import numpy as np
array1 = np.array([2, 4, 6, 8, 10])
print(array1.max())
print(array1.min())
10
2
import numpy as np
array1 = np.array([2, 4, 6, 8, 10])
print(array1.mean())
6
- 중앙값
- median 메소드
- numpy array의 메소드가 아닌 numpy의 메소드
import numpy as np
array1 = np.array([2, 4, 6, 8, 10])
array2 = np.array([1, 3, 5, 7, 9])
print(np.median(array1))
print(np.median(array2))
6
5
import numpy as np
array1 = np.array([2, 4, 6, 8, 10])
print(array1.std())
print(array1.var())
3.16227766
10
출처: CODEIT - 데이터 사이언스 입문