본문 바로가기
개발 (AI)/선형대수

[행렬] 행렬의 여러 가지 계산, 대각합 (파이썬, 넘파이, 계산 검증)

by 진현개발일기 2023. 5. 2.

■ 행렬의 덧셈

 행렬의 덧셈은 A, B 행렬 모두 크기가 동일해야한다.

 

1+2, 7+8, 이런식으로 원소끼리 덧셈을 해주면 된다. 그러므로 열과 행의 길이가 같아야한다.

 

이 또한 모듈화를 위해 def로 함수로 만들었다 :)

■ 행렬의 뺄셈

 

■ 행렬의 스칼라 곱

 

행렬의 스칼라 곱은 행렬의 크기가 몇 배로 늘어나냐는 의미이다. 각 원소에 스칼라 값을 곱해주면된다.

 

■ 행렬의 원소 곱

 

 

행렬의 원소 곱은 두 행렬의 해당 인덱스에 위치한 원소끼리 곱해주는 것이다.

 

A와 B의 원소 곱을 예시로 수학적 표기는 아래와 같다.

A ⊙ B

 

가운데 ⊙ 표시는 원소끼리 곱하는 원소곱을 의미한다.

 

■ 행렬의 곱셈

행렬의 곱셈은 처음에는 약간 복잡하게 다가오는 개념이다.

하지만 계산을 계속 하다보면 매우매우 간단한 것을 깨닫게된다.

 

일단 행렬을 정의하자면 원소를 표준화해서 표시할 때 아래와 같이 표시한다.

 

i = 행, j = 열

즉 a11은 1행 1열에 위치한 원소 라는 뜻이다.

이제 행렬의 곱셈을 보자.

 

행렬의 곱셈을 계산할려면 파라미터로 넘겨지는 두 행렬은 아래 조건을 충족시켜야한다.

 

위 예시를 기준으로 A는 3x2사이즈이고 B는 2x3 사이즈이다. 첫번째 인자의 열 벡터 크기와 두번째 인자의 행 벡터 크기가 동일해야한다.

 

하지만 곱셈을 한다면 아래와 같은 결과가 나온다.

 

아래 A, B를 예시로 하자면

이 방향대로 계산을 한다고 생각하면된다. AB가 바뀌었을 때도 첫번째 인자(B)는 행(row) 방향으로 계산한다고 생각하면된다.

 

위 AB를 기준으로 설명하자면 먼저 결과값으로 나오는 행렬은 3x3 사이즈로 나올 것이다.

[0][0]번째 원소는 (A[0][0] * B[0][0]) + (A[0][1] * B[1][0]) 값이 들어간다.

 

즉 A11과 B11을 곱한 값과 A12과 B21를 곱한 값을 더하면 되는 것인데 A는 위 화살표대로 행 방향으로 인덱스가 움직이고

B는 열방향으로 인덱스가 움직인다.

 

그리고 결과값이 들어갈 원소 인덱스 자리는 각각  A의 행과 B의 열을 기준이 되는 인덱스가 된다. 

예시

이를 파이썬으로 구현해봤다.

원하는 값이 나오는 것을 확인했다.

 

■ 모듈화 (커스텀 라이브러리)

MatrixOperator로 스크립트를 저장했다.

위 행렬곱도 실제 계산해서 검증해봤다

■ 행렬의 대각합

 

대각합(Trace)이란 행렬 A가 정사각행렬일때 주 대각 원소모두 더한 값을 의미한다.

* 주 대각 원소란 행렬의 행 번호와 열 번호가 동일한 원소를 뜻한다.

대각합의 수학 기호는 tr(A)가 된다.

 

 

■ 행렬의 덧셈 (넘파이)

■ 행렬의 뺄셈 (넘파이)

■ 행렬의 원소곱 (넘파이)

역시나 행렬 곱은 안된다

■ 행렬의 스칼라곱 (넘파이)

■ 행렬의 곱 (넘파이)

728x90

'개발 (AI) > 선형대수' 카테고리의 다른 글

[행렬] 대각 행렬  (0) 2023.05.07
[행렬] 대칭 행렬  (0) 2023.05.06
[행렬] 전치행렬  (0) 2023.05.06
[행렬] 공부할 행렬 종류  (0) 2023.05.06
[행렬] 스칼라, 벡터  (0) 2023.04.28