파이썬에서는 다양한 행렬 조작과 연산을 손쉽게 처리할 수 있습니다. 특히 NumPy 모듈은 행렬 연산을 위한 강력하고 다양한 메서드를 제공하여 데이터 분석, 머신러닝 등 수치 계산이 필요한 거의 모든 분야에서 필수적인 도구로 자리 잡고 있습니다.
NumPy의 주요 행렬 연산 함수
add() — 두 행렬의 같은 위치에 있는 원소들을 서로 더합니다.
subtract() — 두 행렬의 원소들을 서로 뺍니다.
divide() — 두 행렬의 원소들을 나눕니다.
multiply() — 두 행렬의 원소들을 곱합니다(요소별 곱셈).
dot() — 진정한 의미의 행렬 곱셈을 수행합니다. multiply()와 달리 요소별 곱셈이 아니라 선형대수에서 말하는 행렬 곱을 계산한다는 점에 유의해야 합니다.
sqrt() — 행렬의 각 원소에 대한 제곱근을 계산합니다.
sum(x, axis) — 행렬의 모든 원소를 더합니다. 두 번째 인자인 axis는 선택 사항으로, axis=0이면 열(column) 단위 합계를, axis=1이면 행(row) 단위 합계를 구할 때 사용됩니다.
"T" — 지정된 행렬의 전치(transpose)를 수행합니다. 즉, 행과 열을 서로 바꿔줍니다.
예제 코드
import numpy
# 두 개의 행렬을 값으로 초기화
x = numpy.array([[1, 2], [4, 5]])
y = numpy.array([[7, 8], [9, 10]])
# add()를 사용하여 행렬 덧셈
print ("두 행렬의 덧셈: ")
print (numpy.add(x,y))
# subtract()를 사용하여 행렬 뺄셈
print ("두 행렬의 뺄셈 : ")
print (numpy.subtract(x,y))
# divide()를 사용하여 행렬 나눗셈
print ("행렬 나눗셈 : ")
print (numpy.divide(x,y))
print ("두 행렬의 곱셈(요소별): ")
print (numpy.multiply(x,y))
print ("두 행렬의 행렬 곱(dot product) : ")
print (numpy.dot(x,y))
print ("각 원소의 제곱근 : ")
print (numpy.sqrt(x))
print ("전체 원소의 합 : ")
print (numpy.sum(y))
print ("열 방향 합계(axis=0) : ")
print (numpy.sum(y,axis=0))
print ("행 방향 합계(axis=1) : ")
print (numpy.sum(y,axis=1))
# "T"를 사용하여 행렬 전치
print ("행렬 전치 : ")
print (x.T)실행 결과
두 행렬의 덧셈: [[ 8 10] [13 15]] 두 행렬의 뺄셈 : [[-6 -6] [-5 -5]] 행렬 나눗셈 : [[0.14285714 0.25 ] [0.44444444 0.5 ]] 두 행렬의 곱셈(요소별): [[ 7 16] [36 50]] 두 행렬의 행렬 곱(dot product) : [[25 28] [73 82]] 각 원소의 제곱근 : [[1. 1.41421356] [2. 2.23606798]] 전체 원소의 합 : 34 열 방향 합계(axis=0) : [16 18] 행 방향 합계(axis=1) : [15 19] 행렬 전치 : [[1 4] [2 5]]
마무리
위 예제에서 볼 수 있듯이 NumPy를 활용하면 행렬의 사칙연산부터 제곱근 계산, 합계 산출, 전치까지 복잡한 수학적 작업을 몇 줄의 코드로 간단하게 처리할 수 있습니다. 특히 multiply()와 dot()의 차이를 정확히 이해하는 것이 중요합니다. 전자는 같은 위치의 원소끼리 곱하는 요소별 곱셈이고, 후자는 선형대수의 규칙에 따라 행과 열을 곱하는 행렬 곱셈입니다. 이러한 기본기를 잘 익혀두면 이후 벡터화 연산이나 딥러닝 프로그래밍을 배울 때 큰 도움이 됩니다.