안녕하세요.
Numpy 세번째 시간입니다.
앞전 2개의 글에 배열을 선언한 뒤 붙이고 나누는 등 기본적인 활용법에 대해 공부했었는데요.
이번엔 Numpy 의 연산, 브로드캐스팅, 집계함수 및 마스킹연산에 대해 공부해보도록 하겠습니다.
# Numpy 연산
def add_five_to_array(values):
output = np.empty(len(valus))
for i in range(len(values)):
output[i] = values[i] + 5
return output
values = np.random.randint(1, 10, size=5)
add_five_to_array(values)
big_array = np.random.randint(1, 100, size=10000000)
add_five_to_array(big_array)
# 5.3 s +- 286 ms per loop
# Numpy를 활용했을 때
big_array + 5
# 33.5 ms +- 1.94 ms per loop
위의 add_five_to_array 는 모든 원소에 5를 더해서 만드는 함수입니다.
이렇게 작은 크기의 연산을 수행할땐 크게 체감이 되진 않지만 보통 연산이 많이 반복될때 느리게 수행되는것이 확인되는데요.
big_array 라는 배열을 함수의 파라미터로 넘겼을때 계산에 소요되는 시간은 약 5.3초정도입니다.
하나의 연산이 약 5초가 걸린다면... 답답함을 많이 느낄 수 있겠죠?
Numpy 는 이러한 연산을 미리 컴파일 된 코드로 수행할 수 있는 장점이 있습니다.
함수를 활용하지 않고 Numpy 를 활용했을 때 약 33.5 ms 가 걸리는 것을 확인했는데 속도차가 어마어마하게 나는 것을 볼 수 있습니다.
x = np.arange(4)
# array([0, 1, 2, 3])
x + 5
# array([5, 6, 7, 8])
x - 5
# array([-5, -4, -3, -2])
x * 5
# array([0, 5, 10, 15])
x / 5
# array([0. , 0.2, 0.4, 0.6])
# 다차원 행렬 예
x = np.arange(4).reshape((2, 2))
# 0 1
# 2 3
y = np.random.randint(10, size=(2, 2))
# 1 6
# 4 2
x + y
# array([[1, 7],
# [6, 5]])
x - y
# array([[-1, -5],
# [-2, 1]])
위의 예처럼 Numpy는 +, -, *, / 에 대한 기본 연산을 지원합니다.
또한 행렬간 연산인 다차원 행렬에서도 적용이 가능합니다.
다음으로는 브로드캐스팅 연산입니다.
Broadcasting이란 모양이 다른 배열끼리의 연산을 뜻합니다.
matrix + 5
# 2 4 2 5 7 9 7
# 6 5 9 11 10 14
# 9 4 7 14 9 12
matrix + np.array([1, 2, 3])
# 2 4 2 1 2 3 3 6 5
# 6 5 9 7 7 12
# 9 4 7 10 6 10
np.arange(3).reshape((3,1)) + np.arange(3)
# 0 0 1 2 0 1 2
# 1 1 2 3
# 2 2 3 4
위의 예처럼 각각의 예마다 앞에 있는 배열과 모양이 다른 5, np.array([1, 2, 3]), np.arange(3) 을 선언해 덧셈을 진행하더라도
배열의 형태를 맞춰 연산이 되는것을 볼 수 있습니다.
마지막으로 집계함수와 마스킹 연산을 알아보겠습니다.
x = np.arange(8).reshape((2, 4))
# 0 1 2 3
# 4 5 6 7
np.sum(x)
# 28
np.min(x)
# 행렬 중 가장 작은 값
# 0
np.max(x)
# 행렬 중 가장 큰 값
# 7
np.mean(x)
# 행렬값의 평균
# 3.5
# 행결값의 표준편차
# np.std
np.sum(x, axis=0)
# array([4, 6, 8, 10])
np.sum(x, axis=1)
# array([ 6, 22])
# 마스킹 연산
x = np.arange(5)
# array([0, 1, 2, 3, 4])
x < 3
# array([True, True, True, False, False])
x > 5
# array([False, False, False, False, False])
x[x < 3]
# array([0, 1, 2])
위의 예처럼 sum, max, min 등 Numpy 에도 기본적인 연산과 관련된 함수들이 정의되어 있습니다.
또한 마스킹 연산을 통해 배열의 값 비교를 손쉽게 할수도 있습니다.
이상으로 Numpy 와 관련된 기초적인 내용에 관해 알아봤습니다.
간단한 예제와 함께 진행을 해서 편리함이 크게 많이 안느껴질수도 있긴 하지만 앞으로 더욱 다양한 예제를 통해 보완해보도록 하겠습니다.
감사합니다.
'IT > Python' 카테고리의 다른 글
Pandas(판다스) - 파이썬을 활용한 데이터 분석 기초 #4 (4) | 2022.09.25 |
---|---|
Numpy(넘파이) - 파이썬을 활용한 데이터 분석 기초 #2 (0) | 2022.09.19 |
Numpy(넘파이) - 파이썬을 활용한 데이터 분석 기초 #1 (0) | 2022.09.18 |