NumPy 노트

“나는 천성적으로 암기력이 좋지 못해 기록하지 못한 것은 기억하지 못한다.”라는 생각을 (사실이지만) 기반으로 NumPy에 대한 내용을 단편적으로 정리합니다. NumPy는 직관적이지만 때론, 자주 그 함축적인 코드 안에 내포된 의미를 파악하지 못해 해매이는 경우가 허다했습니다. 물론 그 함축적인 의미는 기본과 기본들의 연결로 완성된 것이기에 기본적인 내용을 더 중요시하여 기록해 둡니다.

배열로 생성

원소의 접근

산술 연산

numpy.ndarray 타입 객체 간의 산술연산(+, -, *, /)는 원소별(element-wise product)입니다. +, -, *, / 산술연산에 대한 동일한 매서드는 각각 np.add, np.subtract, np.multiply, np.divide 입니다.

numpy.ndarray과 단일값(Scalar)에 대한 산술 연산은 보로드케스트(Boradcast) 처리됩니다.

브로드케스트

스칼라뿐만 아니라 shape가 다른 배열 간에도 브로드케스트로 처리됩니다.

행렬의 곱(내적) 연산

배열 요소의 합과 곱

True는 1로, False 0으로 변환되어 합산됩니다.

배열 요소 중 최대값의 인덱스 구하기

np.argmax(x)는 x 배열을 1차원으로 평면화된 배열에 대해 최대값을 갖는 인덱스를 반환하고, np.argmax(x, axis=0)는 첫번째 축인 row 방향(세로방향)으로 구성되는 요소 중 최대인 인덱스를 반환하며, y1 = np.argmax(x, axis=1)는 두번째 축인 column 방향(가로방향)으로 구성되는 요소 중 최대인 인덱스를 반환합니다.

배열 요소 중 임의로 몇 개만 뽑아내기

기계학습이나 신경망 훈련떼 방대한 입력 데이터 중 일부만을 뽑아내 활용해야 하는 경우가 있는데, 이를 위한 코드입니다. 아래는 총 9개의 요소 중 3개의 요소를 임의로 뽑아내 배열로 반환합니다.

배열 요소의 형변환

아래처럼 배열을 생성할 때 타입을 강제로 지정할 수도 있습니다.

수치미분(접선)의 결과를 그래프로 표현하기

다음과 같은 함수가 있을 때.. 이 함수를 미분한 결과는 이 함수의 그래프에 대한 접선의 방정식이 됩니다.

위 함수에 대한 코드 정의는 다음과 같습니다.

미분은, 중앙차분 방식으로 정의하면 다음과 같구요.

미분 결과는 접선인데, 이 접선을 표현하는 함수를 반환하는 함수는 다음과 같습니다.

이제 x 절편의 범위를 0~20까지 잡고 함수의 그래프와 이 함수의 x = 11에서의 접선을 그리는 코드는 다음과 같습니다.

결과 그래프는 다음과 같습니다.

이와 같은 미분에 대한 파이선 코드는 기계 학습이나 신경망 학습에서 가중치와 편향에 대한 최적의 값을 얻기 위해 활용되는 경사하강법(Gradient Descent Method)에서 사용됩니다.