(*이 시리즈의 내용은 모두 '인공지능 100점을 위한 파이썬 수학' 서적의 내용을 정리한 것입니다. 사진과 같은 자료들 또한 출처가 위 책임을 밝힙니다.)
행렬은 괄호 안에 직사각형 형태로 수를 배열한 것이다. 크기와 모양이 같은 행렬들끼리 더하거나 빼는 연산을 할 수 있다.
수학적으로 행렬은 크기와 모양이 같아야만 더하거나 빼는 연산을 할 수 있는데, numpy에서 브로드캐스트라는 내부 기능이 적용되어 크기와 모양이 다르더라도 행 또는 열을 확정하여 크기와 모양을 같게 만든 후 연산이 가능해진다.
(1) 행렬의 곱셈
C 행렬의 1행 1열 원소인 c1의 값은 A의 1행의 원소인 a1, a2와 B의 1열 원소인 b1, b3의 값을 각각 곱한 후 더한 값이다.(c1 = a1b1 + a2b3)
(2) 행렬의 계산과 선형대수
포도, 귤, 사과, 배를 각각 1개 구입하고 2350원을 지불하였다. 다음날 순서대로 5개, 2개, 4개, 7개를 구입하고 10,600원을 지불하였고, 다시 다음날 귤 1개, 사과 1개, 배 2개를 구입하고 2450원을 지불했다. 다음날 5개, 2개, 2개, 3개를 구입하고 6800원을 지불하였다. 받은 영수증에는 포도, 귤, 사과, 배의 개별 가격이 기록되지 않은 채 총금액만 적혀있는데, 과일들의 개당 가격은 얼마일까?
W + X + Y + Z = 2350 --- 1
5W + 2X + 4Y + 7Z = 10600 --- 2
X + Y + 2Z = 2450 --- 3
5W + 2X + 2Y + 3Z = 6800 --- 4
위 식이 성립하고 이를 행렬식으로 정리하면,
X + Y = 1100 --- 1
2X + 3Y = 2800 --- 2
(1) * 3 - (2) 하면 X = 500이고, X를 (1)에 넣어주면 Y = 600을 구할 수 있다. 이를 행렬을 이용하여 풀면,
문제는 AX = B의 형태가 된다.
X를 구하기 위해 양쪽에 A의 역행렬을 곱해준다.(행렬의 경우 곱셈의 교환 법칙이 성립하지 않는다!) 즉, AB와 BA는 같지 않으며, A^(-1)AX = A^(-1)B가 되어야 한다.
위의 식을 풀면
위 그림과 같이 되며 계산하는 것은 numpy의 array를 사용한다.