Sitemap

[Python] Linear algebra codes

3 min readAug 3, 2018

--

본 포스팅은 edwith BoostCourse에서 ‘머신러닝을 위한 파이썬’ 강의를 듣고 한 포스팅입니다.

간단한 선형대수의 여러가지 기법들을 파이썬 코드로 표현할 수 있다.

  1. Vector representation of python

파이썬에서 Vector를 표현하는 방법은 다양하다. 대표적으로 list, tuple, dict 타입이 있다. 기본적으로는 list로 표현한다. 그래서 list로 vector 연산을 실시해본다.

Vector의 덧셈

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

result = [sum(t) in zip(u, v, z)]
print(result)

zip을 사용해 같은 인덱스에 있는 값들을 덧셈을 하여 출력을 해주는 코드다.

Vector의 계산 : Scala-Vector product

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

result = [alpha*sum(z) for z in zip(u, v)]
print(result)

스칼라와 벡터가 같이 나왔을 경우에는 벡터 값을 계산해 준 후에 스칼라 값을 연산해주는 방식으로 계산할 수 있다. 위의 코드에서 보면 u벡터와 v 벡터를 zip으로 값을 꺼내와서 더한 값에 alpha, 즉 2를 곱해준 값을 출력하게 된다. 처음에는 1,4가 꺼내져서 더한 값인 5가 나오고 거기에 alpha인 2가 곱해져 10이 출력될 것이다. 그 다음도 똑같이 연산되어 출력될 것이다.

2. Matrix representation of python

Matrix 역시 파이썬으로 표시하는 다양한 방법이 존재한다.

Matrix의 덧셈

matrix_a  = [[3, 6], [4, 5]]
matrix_b = [[5, 8], [3, 7]]

result = [[sum(row) for row in zip(*t)] for t in zip(matrix_a, matrix_b)]

print(result)

위의 zip을 사용해서 matrix끼리 덧셈을 하는 코드이다. 처음 zip으로 묶이는 애들은 ([3,6], [5,8])로 묶인다. 그런데 *t이므로 unpacking이 되서 [3,6]과 [5,8]로 나누어진다. 이후 unpacking된 값끼리 연산을 하게 된다.

Matrix Transpose

matrix_a = [[1, 2, 3], [4, 5, 6]]
result = [[element for element in t] for t in zip(*matrix_a)]

print(result)​

matrix_a에 *를 붙여주고 그 부분을 zip으로 묶으면 처음에 1과 4가 들어간다. 그리고 2,5가 들어가고 마지막에 3,6이 들어간다. 따라서 element가 Transpose되서 들어가게 된다.

Matrix Product

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)​

행렬의 곱셈은 왼쪽 행렬의 row와 오른쪽 행렬의 column의 element들을 곱해서 그 값들을 모두 더해주는 연산이다. 따라서 이걸 구현할때도 먼저 matrix_a에서 row값을 가져오고 B의 column값을 가져오려면 zip을해서 가져오면 된다. 그래서 각각 가져온 값들을 또 zip하여 element들을 뽑아서 각각 곱한 후에 sum으로 더해준다.

--

--

No responses yet