본문 바로가기
Programming/Python

파이썬으로 간단한 행렬 연산 / 선형대수

by Renechoi 2022. 10. 14.

 

 

부스트코스의 "머신러닝을 위한 파이썬" 강좌 필기 내용 

 

https://www.boostcourse.org/ai222/lecture/253408/?isDesc=false

 

 

 

## 벡터의 계산 

''' 
# [2,2] + [2,3] + [3,5] = [7,10]를 계산할 때 
# 이런 코드는 쓰면 안 됨 = 파이썬 답지 못하고 아름답지 않음 

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

for i in range(len(u)):
    result.append([u[i] + v[i] + z[i]])
    
print(result)
'''


from re import X


u = [2,2]
v = [2,3]
z = [3,5]
result = [sum(t) for t in zip(u,v,z)]       # zip을 사용해서 같은 인덱스 값을 한번에 뽑아줘서 
# print(result)
# [7, 10]




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])
# print(result)
# [10, 12, 14]


# Matrix Representation of python
'''
C = A + B = [ 3 6 ] + [ 5 8 ]   = [ 8  14 ]
              4 5       6 7         10 12
'''

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)]        # 매트릭스를 집으로 묶어서 덧셈을 해주는 방식
# zip으로 처음 묶이는 값 = [3,6]과 [5,8] = ( [3,6], [5,8] )
# *를 사용해서 이 튜플이 풀리면서 각각의 변수로 풀리게 됨 
# [3, 6] [5, 8]로 풀리게 된 것이 다시 zip으로 묶으면 => 3, 5가 sum이 되어 나오고, 6,8이 sum => [3+6 6+8]
# 다시 처음으로 matrix 묶는 것 => [4,5] [6,7]이 묶임 
              
# print(result)
# [[8, 14], [10, 12]]


alpha = 4 
# 상수 곱의 경우 
result = [[alpha * element for element in t] for t in matrix_a]
# print(result) 
# [[12, 24], [16, 20]]


matrix_a = [[1,2,3], [4,5,6]]

# A = [ 1 2 3 ]       AT(역행렬) = [ 1 4 ]
#       4 5 6                        2 5
#                                    3 6
# 역행렬 구하기                                    
result = [ [ element for element in t] for t in zip(*matrix_a)]
# 매트릭스에 별표를 해주어서 unpacking이 되어 두개의 변수로 쪼개지게 됨 1 2 3 
#                                                                    4 5 6 
# t에 1, 4가 들어감 
# 각각 element = [ 1, 4 ]





### 행렬 곱 

matrix_a = [[1, 1, 2], [2, 1, 1]]
matrix_b = [[1,1], [2,1], [1,3]]

# C = A X B = | 1 1 1 |       | 1 1 |
#             | 2 1 1 |   X   | 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]
# 첫번째 매트릭스에서 row 값 가져오고 두번째에서 컬럼 값 가져옴 
# row_a에 처음 [1,2,3]이 들어가게 되고
# 두번째 matrix_b를 unpacking하고 zip으로 묶어주니 [1 2 3 ] 
# zip으로 묶어줘서 같은 위치끼리 곱셈이 가능하게 됨 => 각각 곱해준다음에 sum으로 더해줌 
# 이 과정에서 포인트 = 컬럼 값을 가져올 때 *로 풀어주고 다시 집으로 묶어주어 column 값을 가져올 수 있음
반응형