관리 메뉴

개발이야기

[인프런 강의] Python lab_9 linear algebra with pythonic 본문

Python /인프런 강의

[인프런 강의] Python lab_9 linear algebra with pythonic

안성주지몬 2018. 12. 21. 00:00

이번 과제는 파이썬 다운 코딩(Pythonic)을 활용하여 vector 연산과 matrix연산을 구현하는 과제였다.
Pythonic 하게 구현하는 것이 어려웠다(쉽고 간결하게 한줄로 끝내기) 

1. zip 과 *(asterisk)에 활용 
2. set{}은 중복제거 
3. 이번 과제의 꽃은 matrix product 였던것 같다. 빼기 연산을 구현하는 것도 쉽지 않았다. 
4. is_matrix_equal 함수는 one line 코딩 실패..

def vector_size_check(*vector_variables): #Asterisk *vector_variables 은 튜플 형태 ! return len(set([len(vector) for vector in vector_variables])) == 1 # set은 중복 제거 길이가 다르면 여러 값이 나옴 def vector_addition(*vector_variables): if not vector_size_check(*vector_variables): raise ArithmeticError return [sum(t) for t in zip(*vector_variables)] #Asterisk 즉 *을 붙여주면 각각의 리스트, 예를들어 *vector_variables가 A,B,C리스트로 구성되어있따면 # unpacking을 해준것 chapter 9 lab:Simple Linear algebra codes 보기 def vector_subtraction(*vector_variables): if not vector_size_check(*vector_variables): raise ArithmeticError return [2 * t[0]-sum(t) for t in zip(*vector_variables)] def scalar_vector_product(alpha, vector_variable): return [alpha * t for t in vector_variable] def matrix_size_check(*matrix_variables): return len(set([len(vector) for vector in matrix_variables])) == 1 def is_matrix_equal(*matrix_variables): result = True for t in zip(*matrix_variables): for row in zip(*t): if not len(set(row)) == 1: result = False break return result def matrix_addition(*matrix_variables): if not matrix_size_check(*matrix_variables): raise ArithmeticError return [[sum(row) for row in zip(*t)] for t in zip(*matrix_variables)] def matrix_subtraction(*matrix_variables): if not matrix_size_check(*matrix_variables): raise ArithmeticError return [[2 * row[0] - sum(row) for row in zip(*t)] for t in zip(*matrix_variables)] def matrix_transpose(matrix_variable): return [[element for element in t] for t in zip(*matrix_variable)] def scalar_matrix_product(alpha, matrix_variable): return [[alpha * element for element in t] for t in matrix_variable] def is_product_availability_matrix(matrix_a, matrix_b): return len(matrix_a) == len(matrix_b[0]) def matrix_product(matrix_a, matrix_b): if not is_product_availability_matrix(matrix_a, matrix_b): raise ArithmeticError return [[sum(a * b for a,b in zip(row_a, column_b)) for column_b in zip(*matrix_b)] for row_a in matri


Comments