목차
대학원 시절 로보틱스 연산을 위해 matlab을 주로 사용했습니다. 최근 파이썬이라는 무료 프로그램의 배포로 인해 더 이상 매틀랩을 사용하지 않고 있습니다. 파이썬의 차원에 대한 이해는 어려운 감이 있지만 선형대수를 위해 array와 matrix 사용에 대해 정리하고자 합니다.
np.array 와 np.matrix의 차이
파이썬에서 np.array는 배열, np.matrix는 행렬이라 부릅니다.
파이썬의 차원은 일반 공업수학에서 배우는 선형대수와는 그 결이 다릅니다. 선형대수에서 3X3 행렬은 3차원의 행렬의 의미하지만 파이썬에서는 이 또한 2차원으로 계산합니다. 공대생들에게는 조금 혼란스러울 수 있습니다.
조금 고민해 본 결과 파이썬에서의 차원은 요소를 선택하기 위한 인자를 몇 개 넣을 수 있는지를 차원으로 부르는 것 같습니다. 위의 행렬에서 4의 값을 호출하기 위해 m3[1, 0]라 적을 겁니다. 두 개의 인자를 사용하고 있으며, 이를 2차원이라 부릅니다.
파이썬 기준 배열(array)은 다차원으로 생성할 수 있고, 연산이 벡터화되어 빠릅니다. 행렬(matrix)은 행과 열로만 구성할 수 있으며 수학적 성질에 따라 연산이 이뤄집니다. 선형대수의 계산을 위해서는 matrix를 사용하는 것을 권장합니다.
np.array를 이용한 선형대수 연산
np.array는 선형대수를 위한 데이터 처리를 하지 않기 때문에 공학적 연산을 위해 신경 써야 하는 부분들이 있습니다. 배열의 곱의 경우 행렬곱이 아닌 요소들 간의 곱으로 연산됩니다.
선행대수 연산에서 자주 사용하는 역행렬 계산의 경우 배열을 사용할 때 넘파이의 선형대수 함수(np.linalg )를 사용해 줘야 합니다. 아래 코드를 참고하세요
array1 = np.array([[1, 2],
[3, 4]])
np.linalg.inv(array1)
array([[-2. , 1. ],
[ 1.5, -0.5]])
np.mat(=np.matrix)를 이용한 선형대수 연산
mat 또는 matrix 함수를 사용하여 행렬을 만들어 준다면 선형대수 연산 수식을 간단하게 구성할 수 있습니다.
m1 = np.matrix([[1,2], [3,4]])
matrix([[1, 2],
[3, 4]])
m2 = np.mat([[5, 6], [7, 8]])
matrix([[5, 6],
[7, 8]])
배열에서 수행한 덧셈, 요소 곱, 곱셈, 역행렬은 아래와 같이 표현할 수 있습니다. 요소곱의 경우 np.multiply를 사용하는 복잡함이 있지만 선형대수의 복잡한 계산에서 잘 사용하지 않으며, 행렬곱과 혼용되지 않을 수 있습니다.
matrix_sum = m1 + m2
matrix([[ 6, 8],
[10, 12]])
matrix_el_prod = np.multiply(m1, m2)
matrix([[ 5, 12],
[21, 32]])
matrix_product = m1 * m2
matrix([[19, 22],
[43, 50]])
matrix_inverse = m1.I
matrix([[-2. , 1. ],
[ 1.5, -0.5]])
마치며
공대생들의 선형대수 연산을 위해 파이썬 활용하는 방법에 대해 알아보았습니다. 파이썬 차원에 대해서는 수학적 차원이 아닌 데이터 차원으로 접근해야 이해가 편리합니다. 최근에도 대학교에서 매틀랩을 사용하고 있으나, 회사에서는 매틀랩 라이선스를 보유하고 있지 않습니다. 취업을 준비하시는 분들이라면 파이썬으로의 변환을 빨리 해야 합니다.
댓글