IT/Python

Numpy(넘파이) - 파이썬을 활용한 데이터 분석 기초 #3

디지털 은행원 이야기 2022. 9. 20. 22:16
반응형

안녕하세요.

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 와 관련된 기초적인 내용에 관해 알아봤습니다.

간단한 예제와 함께 진행을 해서 편리함이 크게 많이 안느껴질수도 있긴 하지만 앞으로 더욱 다양한 예제를 통해 보완해보도록 하겠습니다.

 

감사합니다.

 

 

반응형