Numpy

1 minute read

넘파이

파이썬이 C++ 보다 딱 한 가지 나은 점이 있다면
그것은 넘파이의 존재이다.

파이썬에 넘파이가 없었다면 기계학습이 이정도로 발달했을까?

넘파이는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬의 라이브러리이다.

넘파이에 대해서 알아보자.

먼저 넘파이를 설치하자.

pip install numpy

파이썬 콘솔창에 입력하면 설치가 알아서 이루어진다.

이후 파이썬 대화창이든 파일이든

import numpy as np 하나면 우리는 행렬, 다차원 배열은 물론 각종 수식까지도 계산할 수 있다.

넘파이는 ndarray 라는 클래스로 배열을 계산한다. 이는 N dimentional array 의 약자로 다차원 배열로 해석할 수 있다.

파이썬의 거지같은 동적 언어가 여기서 빛을 발하는 것인지,
우리가 넣는 배열에 따라 알아서 배열 크기를 할당하고 그 크기에 맞게 계산한다.

1차원 배열

import numpy as np
a = np.array([1.0, 2.0, 3.0])
print(a)

이렇게 하면 결과 창에는 [1. 2. 3.] 이 출력된다.
double a[3] = {1, 2, 3}; 이 아니다.
파이썬은 배열 출력이 편하다.
‘어떤 언어’는 배열을 출력하려면 for문을 돌려야 한다.

위 예제에서 생성된 ndarray 클래스는 서로 연산이 가능하다.
물론 넘파이가 알아서 사이즈 조정도 해준다.
이를 브로드캐스팅이라고 한다. 대충 알아먹을 정도면 본인이 알아서 해주지만
행렬 계산할 때 앞의 열과 뒤의 행 개수가 안 맞거나 할 때는 오류를 토한다.

a = np.array([1.0, 2.0, 3.0])
b = np.array([2.0, 3.0, 4.0])
print(a+b)

위 결과는 [3. 5. 7.] 이다.

덧셈 뿐 아니라 곱셈 뺄셈 나눗셈 모두 가능하다.
물론 수 하나를 곱하는 스칼라곱도 가능하다.

다차원 배열

넘파이는 행렬 계산도 편하다.

A = np.array([[1, 2], [3, 4]])
print(A)
print(A.shape)

위 예제는

[[1 2  
 [3 4]]  
 (2, 2)

라고 출력된다.
2차원 배열 (행렬) 도 모양에 맞게 잘 출력해준다.
아래의 (2, 2) 는 이 행렬이 2x2 행렬이라는 뜻이다.

행렬끼리의 연산도 편하다.

A + B 로 모든 연산이 끝난다.
주의할 점은, A * B 은 행렬 간의 곱셈이 아니다.

2x2 행렬 둘을 * 로 연산하면 행렬이 곱해지는 게 아니라 각 위치에 맞는 수끼리 곱해진다.
행렬의 곱은 np.dot(A, B) 라는 함수로 연산한다.

부가기능

A = np.array([1, 2, 3, 4, 5])
print(A[np.array([2, 4])]

위 예제는 3, 5를 출력한다.
2, 4번째 인덱스의 원소를 출력하는 것이다.

print(A > 3)[False, False, False, True, True] 를 출력한다.
print(A[A>3])[4, 5] 를 출력한다.