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)]
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)]
print(result)
- numpy 에서 더 간단하게 구현 가능하나, 파이썬으로도 가능하다.
Matrix representation of python
- Matrix 역시 Python으로 표시하는 방법이 다양하다.
- 특히 dictionary로 표현할 때는 무궁무진한 방법이 존재한다.
- 기본적으로 two-dimensional list 형태로 표현할 것.
- [[1번째 row], [2번째 row], [3번째 row]]
C=A+B=[3465]+[5687]=[8101412]
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)]
print(result)
- 고정되어 있는 변수의 개수끼리 덧셈, 뺄셈을 해주는 연산
Matrix 계산 : Matrix Transpose
A=[142536],AT=⎣⎢⎡123456⎦⎥⎤
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=[142536],B=⎣⎢⎡123456⎦⎥⎤⇒C=A×B=[121121]⎣⎢⎡211113⎦⎥⎤=[5586]
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 를 보게 되면, 같은 인덱스에 있는 값끼리 서로 곱해준 후 더해주면 된다.
REFERENCE
- www.boostcourse.org/ai222 머신러닝을 위한 파이썬