[chapter 4] 행렬, 파트 1 : 행렬과 행렬의 기본 연산
1. 행렬
행렬은 벡터를 한 차원 더 끌어올린 것이며, $A$ 또는 $M$과 같이 굵은 대문자로 표시한다.
행렬의 크기는 (행, 열) 규칙으로 나타낸다. 행이 3개이고 열이 5개면 3 x 5이다.
행렬의 세 번째 행과 네 번째 열에 있는 원소는 $a_{3,4}$로 나타내고, 파이썬에서는 A[2,3]으로 인덱싱 된다.
행렬은 슬라이싱을 통해 아래처럼 행렬의 행 또는 열의 부분 집합을 추출한다.
A = np.arange(60).reshape(6,10)
sub = A[1:4:1, 0:5:1] # A[행시작 : 행끝 : 행스텝, 열시작 : 열끝 : 열스텝]
print(A)
print(sub)
# A
#[[ 0 1 2 3 4 5 6 7 8 9]
# [10 11 12 13 14 15 16 17 18 19]
# [20 21 22 23 24 25 26 27 28 29]
# [30 31 32 33 34 35 36 37 38 39]
# [40 41 42 43 44 45 46 47 48 49]
# [50 51 52 53 54 55 56 57 58 59]]
# sub
#[[10 11 12 13 14]
# [20 21 22 23 24]
# [30 31 32 33 34]]
특수 행렬
난수행렬(Random numbers matrix)
일반적으로 가우스(정규)와 같은 분포로부터 무작위로 추출된 숫자를 가진 행렬이다.
아래처럼 NumPy를 이용해 만들 수 있다.
Mrows = 4
Ncols = 6
A = np.random.randn(Mrows, Ncols)
print(A)
#[[ 0.54509673 -1.35833737 -0.44451855 -0.6973356 0.83482279 -0.85557238]
# [ 0.28412463 0.04809285 -0.63084544 1.85207711 -1.06718904 0.5230025 ]
# [-1.01821485 -0.69742659 0.63339289 -0.44249523 0.43579851 -0.78042508]
# [-0.78423631 0.65863089 0.26969752 0.28650634 1.30179391 -0.66027789]]
정방 행렬과 비정방 행렬
정방 행렬(square matrix)의 행 수는 열 수와 같다.
비정방 행렬(nonsquare matrix)의 행 수와 열수는 다르다.
비정방 행렬의 행 수가 열 수보다 많으면 높다고 하고, 열 수가 행 수보다 많으면 넓다고 한다.
대각 행렬
행렬의 대각(diagonal)은 왼쪽 위에서 시작하여 오른쪽 아래로 내려가는 원소들이다.
대각 행렬(diagonal matrix)은 모든 비대각 원소가 0이며, 대각 원소는 0일 수도 있지만 0이 아닌 값을 가질 수 있는 유일한 원소이다.
NumPy 함수 np.diag()는 입력에 따라 두 가지 방식으로 동작한다.
- np.diag에 행렬을 입력하면 대각 원소를 벡터로 반환한다.
- np.diag에 벡터를 입력하면 대각선에 해당 벡터 원소가 있는 행렬을 반환한다.
삼각 행렬
삼각 행렬(triangular matrix)은 주 대각선의 위 또는 아래가 모두 0이다.
0이 아닌 원소가 대각선 위에 있으면 행렬을 상삼각 행렬이라 하고, 0이 아닌 원소가 대각선 아래에 있으면 하삼각 행렬이라고 한다.
NumPy에는 행렬의 위(np.triu()) 또는 아래(np.tril()) 삼각형을 추출하는 전용 함수가 있다.

단위 행렬
단위 행렬(identity matrix)은 모든 대각 원소가 1인 정방 대각 행렬이다.
행렬 또는 벡터에 단위 행렬을 곱하면 동일한 행렬 또는 벡터가 된다는 점에서 숫자 1과 동등하다.
단위행렬은 문자 $I$로 나타내며, 크기는 $I_5$와 같이 아래 첨자로 표시한다.
np.eye()를 사용해 단위 행렬을 만들 수 있다.
영 행렬
영 행렬(zeros matrix)은 모든 원소가 0인 행렬로, $0$의 굵은 체로 나타낸다.
파이썬에서 영 행렬은 np.zeros() 함수를 사용해 생성한다.
2. 행렬 수학
덧셈과 뺄셈
두 행렬을 더할 때는 대응되는 원소끼리 더한다.
$$ \begin{bmatrix}2 & 3 & 4 \\1 & 2 & 4 \\\end{bmatrix} + \begin{bmatrix}
0 & 3 & 1 \\-1 & -4 & 2 \\\end{bmatrix} = \begin{bmatrix}
2 & 6 & 5 \\0 & -2 & 6 \\\end{bmatrix} $$
행렬 이동
행렬에서는 스칼라를 더할 수 없다.
선형대수학에서는 정방 행렬에 스칼라를 더하는 행렬 이동(shifting a matrix)가 있다.
대각에 상숫값을 더하는 것과 같이 단위 행렬에 스칼라를 곱해서 더하는 방식으로 구현된다.
$$ A+\lambda I$$
파이썬에서는 아래와 같이 구현할 수 있다.
A = np.array([[4,5,1],[0,1,11],[4,9,7]])
s = 6
B = A + s *np.eye(len(A)) # 이동
print(B)
#[[10. 5. 1.]
# [ 0. 7. 11.]
# [ 4. 9. 13.]]
행렬을 이동하면 대각 원소만 변경되고 나머지는 그대로이다.
스칼라 곱셈과 아다마르곱
두 가지 곱셈 모두 행렬에서도 원소별로 작동한다.
스칼라-행렬 곱셈은 행렬의 각 원소에 동일한 스칼라를 곱한다.
$$ \gamma \begin{bmatrix}a & b \\c & d \\\end{bmatrix} = \begin{bmatrix}
\gamma a & \gamma b \\
\gamma c & \gamma d \\
\end{bmatrix} $$
마찬가지로 아다마르곱도 두 행렬을 요소별로 곱한다.
$$ \begin{bmatrix}2 & 3 \\4 & 5 \\\end{bmatrix} \odot \begin{bmatrix}a & b \\c & d \\\end{bmatrix} = \begin{bmatrix}2a & 3b \\4c & 5d \\\end{bmatrix}$$
NumPy에서 아다마르곱은 np.multiply() 함수를 사용해 구현할 수 있고, A * B로도 구현할 수 있다.
A@B는 표준 행렬 곱셈이므로 주의해야 한다.
'수학 > 선형대수' 카테고리의 다른 글
| [개발자를 위한 실전 선형대수학] Chapter 4 연습문제 (0) | 2025.12.07 |
|---|---|
| [개발자를 위한 실전 선형대수학] 4.3 표준 행렬 곱셈, 4.4 행렬 연산: 전치, 4.5 행렬 연산: LIVE EVIL(연산 순서), 4.6 대칭 행렬 (0) | 2025.12.05 |
| [개발자를 위한 실전 선형대수학] Chapter 3 연습문제 (0) | 2025.11.27 |
| [개발자를 위한 실전 선형대수학] 3.1 상관관계와 코사인 유사도, 3.2 시계열 필터링과 특징 탐지, 3.3 k-평균 클러스터링 (0) | 2025.11.26 |
| [개발자를 위한 실전 선형대수학] Chapter 2 연습문제 (0) | 2025.11.21 |