본문 바로가기
C.W.K.
Stream
Lesson 02 of 08 · published

행렬 종류: 구조가 알려 주는 것

~8 min · matrices, types, identity, diagonal, sparse

Level 0수학 초심자
0 XP0/59 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

같은 객체, 다른 구조

행렬도 모양과 제약에 따라 성질이 달라져. 제약은 귀찮은 족쇄가 아니라 어떤 연산이 가능하고 싼지 알려 주는 type hint야.

유형제약왜 쓸모 있나
정방행 수 = 열 수행렬식과 고유값을 정의할 수 있고, 비특이일 때 역행렬도 가져.
직사각(rectangular)차원을 바꿔. 예를 들면 1,024차원을 256차원으로 투영해.
대각대각 밖이 0축별로 스케일하고 대각 성분만 계산하면 돼.
단위 대각은 1, 나머지는 0곱셈 항등원이라 야.
모든 성분이 0같은 모양의 행렬끼리 더할 때 덧셈 항등원이야.
대칭상관·에너지 모형에 자주 나오고 실수 고유분해 성질이 좋아.
희소대부분의 성분이 00이 아닌 성분 중심으로 저장·계산해 메모리와 연산을 아껴.

왜 신경 써야 해

단위행렬은 정규화와 선형계 공식에, 대각행렬은 스케일링과 SVD에, 대칭행렬은 공분산과 그래프·에너지 문제에 자주 나와. 희소행렬 덕분에 거대한 추천 행렬과 그래프도 메모리에 올릴 수 있고.

직사각행렬에는 보통의 양쪽 역행렬이 없지만 최소제곱해와 유사역행렬은 쓸 수 있어. 정방행렬도 특이면 역행렬이 없어. 모양만 보고 ‘역행렬 있음’이라고 단정하지 마.

행렬 유형은 수학의 type hint야. 유형을 알아보면 어떤 연산이 싸고 어떤 가정이 깨지는지 보여. 희소행렬을 무턱대고 dense로 만들지 말고, 대칭이 아닌 행렬에 대칭 전용 알고리즘을 쓰지도 마.

Code

네 가지 행렬 구조 비교하기·python
import numpy as np

zero = np.zeros((3, 3))
identity = np.eye(3)
diagonal = np.diag([2, 5, 7])
print(diagonal)
# [[2 0 0]
#  [0 5 0]
#  [0 0 7]]

# 대각 행렬 = 스케일링: D @ v 가 v[i] 를 D[i, i] 만큼
v = np.array([1, 1, 1])
print(diagonal @ v)        # [2 5 7]

# 대칭 — 자동 대칭화
A = np.random.randn(3, 3)
S = (A + A.T) / 2          # 어떤 행렬이든 + 그 transpose 는 대칭
print(np.allclose(S, S.T)) # True

External links

Exercise

x축은 2배, y축은 0.5배, z축은 -1배로 바꾸는 3×3 대각행렬을 만들고 벡터 [10, 10, 10]에 곱해. 각 성분과 기하학적 방향이 어떻게 바뀌는지 설명해.
Hint
np.diag([2, 0.5, -1]) @ [10, 10, 10]의 결과는 [20, 5, -10]이야. 음의 배율은 해당 축 방향을 뒤집어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 피파warm

댓글 2

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.
  1. Elechemist
    Elechemist

    import numpy as np

    D = np.diag([2., 0.5, -1.]) v = np.array([10., 10., 10.])

    print('D =') print(D) print('D @ v =', D @ v)

    💛 by 피파warm
    1. 피파
      피파· warmElechemistElechemist

      Yes — that diagonal matrix does exactly the independent per-axis scaling the lesson is aiming at: x doubles, y halves, and z flips sign, so [10, 10, 10] becomes [20, 5, -10]. Nice clean check.