Linear Algebra 선형대수

·2025년 7월 21일

just공부

목록 보기
27/47

Pythonic Code

  • 파이썬 스타일의 코딩 기법
  • 파이썬 특유의 문법을 활용하여 효율적으로 코드를 표현
  • 고급 코드를 작성할 수록 더 많이 필요해짐

Linear Algebra codes

Vector 계산

u = [2, 2]
v = [2, 3]
z = [3, 5]

result = [sum(t) for t in zip(u, v, z)]
# [2,2] + [2,3] + [3,5] = [7, 10]

print(result)
  • for문과 append 대신 zip을 사용하자

Scalar-Vector product

u = [1, 2, 3]
v = [4, 4, 4]
alpha = 2

result = [alpha*sum(t) for t in zip(u,v)]
# 2([1, 2, 3] + [4, 4, 4]) = 2[5, 6, 7] = [10, 12, 14]

print(result)
  • numpy 에서 더 간단하게 구현 가능하나, 파이썬으로도 가능하다.

Matrix representation of python

  • Matrix 역시 Python으로 표시하는 방법이 다양하다.
  • 특히 dictionary로 표현할 때는 무궁무진한 방법이 존재한다.
  • 기본적으로 two-dimensional list 형태로 표현할 것.
  • [[1번째 row], [2번째 row], [3번째 row]]
C=A+B=[3645]+[5867]=[8141012]C = A + B = \begin{bmatrix} 3 & 6 \\ 4 & 5 \end{bmatrix} + \begin{bmatrix} 5 & 8 \\ 6 & 7 \end{bmatrix} = \begin{bmatrix} 8 & 14 \\ 10 & 12 \end{bmatrix}
matrix_a = [[3, 6], [4, 5]]
matrix_b = [[5, 8], [6, 7]]
result = [[sum(row) for row in zip(*t)]
	for t in zip(matrix_a, matrix_b)]
# [3+5 6+8] [4+6 5+7]

print(result)
  • 고정되어 있는 변수의 개수끼리 덧셈, 뺄셈을 해주는 연산

Matrix 계산 : Matrix Transpose

A=[123456],AT=[142536]A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}, \quad A^{T} = \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix}
matrix_a = [[1, 2, 3], [4, 5, 6]]
result = [[element for element in t] for t in zip(*matrix_a)]

print(result)
  • t에는 가장 먼저 1과 4가 들어간다.
  • 각각의 element로 뽑아 [1, 4]가 들어간다.
  • [2, 5], [3, 6] 도 순차저긍로 들어가서 matrix transpose가 완성되게 된다.

Matrix 계산 : Matrix Product

  • matrix안에서 column과 row를 각각 붙여줘야 한다
  • A matrix에서는 row값을 가져오고, B matrix에서는 column 값을 가져오게 된다.
    A=[123456],B=[142536]C=A×B=[112211][211113]=[5856]A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}, \quad B = \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix} \Rightarrow C = A \times B = \begin{bmatrix} 1 & 1 & 2 \\ 2 & 1 & 1 \end{bmatrix} \begin{bmatrix} 2 & 1 \\ 1 & 1 \\ 1 & 3 \end{bmatrix} = \begin{bmatrix} 5 & 8 \\ 5 & 6 \end{bmatrix}
matrix_a = [[1, 1, 2], [2, 1, 1]]
matrix_b = [[1, 1], [2, 1], [1, 3]]
result = [[sum(a*b for a, b in zip(row_a, column_b)) \
	for column_b in zip(*matrix_b)] for row_a in matrix_a]
    
print(result)
  • 처음 오는 A의 [1 2 3] 이 row_a에 저장될 것이다.

  • 두 번째 matrix_b에는

    • [1 4]
    • [2 5]
    • [3 6]
      이 저장된 상태에서 zip을 해주었기 때문에 unpacking이 세 개가 각각 되어 있는 상태이다.
  • 언패킹 되어 있는 상태에서 zip으로 묶어주었기 때문에 첫 번째 column인 column_b에

  • row_a에는 [1, 2, 3] 이 들어가게 될 것이다.

  • column_b에도 [1, 2, 3]이 들어가게 될 것이다.

  • a*b 를 보게 되면, 같은 인덱스에 있는 값끼리 서로 곱해준 후 더해주면 된다.

    • 1*1 + 1*2 + 2*1 ...

REFERENCE

  • www.boostcourse.org/ai222 머신러닝을 위한 파이썬
profile
Whatever I want | Interested in DFIR, Security, Infra, Cloud

0개의 댓글