0. Lec
- 최성철 교수님께서 진행하시는 아래 강의의 과제에 대한 답입니다.
- 밑바닥 부터 시작하는 머신러닝 입문
- [부스트코스] 머신러닝을 위한 Python
1. 벡터 크기 검사 (vector size check)
vector 간 덧셈 또는 뺄셈 연산을 할 때, 연산이 가능한 사이즈인지를 확인하여 가능 여부를 True 또는 False로 반환함
def vector_size_check(*vector_variables):
return len(set([len(vector)for vector in vector_variables])) == 1
# Test Code
print(vector_size_check([1,2,3], [2,3,4], [5,6,7])) # Expected value: True
print(vector_size_check([1, 3], [2,4], [6,7])) # Expected value: True
print(vector_size_check([1, 3, 4], [4], [6,7])) # Expected value: False
2. 벡터 합 (vector addition)
vector간 덧셈을 실행하여 결과를 반환함, 단 입력되는 vector의 갯수와 크기는 일정하지 않음
def vector_addition(*vector_variables):
if not vector_size_check(*vector_variables):
raise ArithmeticError
return [sum(t) for t in zip(*vector_variables)]
print(vector_addition([1, 3], [2, 4], [6, 7])) # Expected value: [9, 14]
print(vector_addition([1, 5], [10, 4], [4, 7])) # Expected value: [15, 16]
print(vector_addition([1, 3, 4], [4], [6,7])) # Expected value: ArithmeticError
3. 벡터 차 (vector subtraction)
vector간 뺄셈을 실행하여 결과를 반환함, 단 입력되는 vector의 갯수와 크기는 일정하지 않음
def vector_subtraction(*vector_variables):
if not vector_size_check(*vector_variables):
raise ArithmeticError
return [t[0] * 2 - sum(t) for t in zip(*vector_variables)]
print(vector_subtraction([1, 3], [2, 4])) # Expected value: [-1, -1]
print(vector_subtraction([1, 5], [10, 4], [4, 7])) # Expected value: [-13, -6]
4. 스칼라 벡터 곱 (scalar vector product)
하나의 scalar 값을 vector에 곱함, 단 입력되는 vector의 크기는 일정하지 않음
def scalar_vector_product(alpha, vector_variable):
return [alpha * t for t in vector_variable]
print (scalar_vector_product(5,[1,2,3])) # Expected value: [5, 10, 15]
print (scalar_vector_product(3,[2,2])) # Expected value: [6, 6]
print (scalar_vector_product(4,[1])) # Expected value: [4]
5. 행렬 크기 검사 (matrix size check)
matrix 간 덧셈 또는 뺄셈 연산을 할 때, 연산이 가능한 사이즈인지를 확인하여 가능 여부를 True 또는 False로 반환함
def matrix_size_check(*matrix_variables):
return len(set(len(t) for t in matrix_variables)) == 1
matrix_x = [[2, 2], [2, 2], [2, 2]]
matrix_y = [[2, 5], [2, 1]]
matrix_z = [[2, 4], [5, 3]]
matrix_w = [[2, 5], [1, 1], [2, 2]]
print (matrix_size_check(matrix_x, matrix_y, matrix_z)) # Expected value: False
print (matrix_size_check(matrix_y, matrix_z)) # Expected value: True
print (matrix_size_check(matrix_x, matrix_w)) # Expected value: True
6. 같은 행렬인지 검사 (is matrix equal)
비교가 되는 n개의 matrix가 서로 동치인지 확인하여 True 또는 False를 반환함
def is_matrix_equal(*matrix_variables):
if not matrix_size_check(*matrix_variables):
raise ArithmeticError
return all([all([len(set(row)) == 1 for row in zip(*matrix)]) for matrix in zip(*matrix_variables)])
matrix_x = [[2, 2], [2, 2]]
matrix_y = [[2, 5], [2, 1]]
print (is_matrix_equal(matrix_x, matrix_y, matrix_y, matrix_y)) # Expected value: False
print (is_matrix_equal(matrix_x, matrix_x)) # Expected value: True
7. 행렬 덧셈 (matrix addition)
matrix간 덧셈을 실행하여 결과를 반환함, 단 입력되는 matrix의 갯수와 크기는 일정하지 않음
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)]
matrix_x = [[2, 2], [2, 2]]
matrix_y = [[2, 5], [2, 1]]
matrix_z = [[2, 4], [5, 3]]
print (matrix_addition(matrix_x, matrix_y)) # Expected value: [[4, 7], [4, 3]]
print (matrix_addition(matrix_x, matrix_y, matrix_z)) # Expected value: [[6, 11], [9, 6]]
8. 행렬 차 (matrix subtraction)
matrix간 뺄셈을 실행하여 결과를 반환함, 단 입력되는 matrix의 갯수와 크기는 일정하지 않음
def matrix_subtraction(*matrix_variables):
if not matrix_size_check(*matrix_variables):
raise ArithmeticError
return [[row[0] * 2 - sum(row) for row in zip(*t)] for t in zip(*matrix_variables)]
matrix_x = [[2, 2], [2, 2]]
matrix_y = [[2, 5], [2, 1]]
matrix_z = [[2, 4], [5, 3]]
print (matrix_subtraction(matrix_x, matrix_y)) # Expected value: [[0, -3], [0, 1]]
print (matrix_subtraction(matrix_x, matrix_y, matrix_z)) # Expected value: [[-2, -7], [-5, -2]]
9. 전치 행렬 (matrix transpose)
matrix의 전치행렬을 구하여 결과를 반환함, 단 입력되는 matrix의 크기는 일정하지 않음
def matrix_transpose(matrix_variable):
return [[element for element in t] for t in zip(*matrix_variable)]
def matrix_transpose2(matrix_variable):
return [list(t) for t in zip(*matrix_variable)]
matrix_w = [[2, 5], [1, 1], [2, 2]]
print(matrix_transpose(matrix_w))
10. 스칼라 행렬 곱 (scalar matrix product)
하나의 scalar 값을 matrix에 곱함, 단 입력되는 matrix의 크기는 일정하지 않음
def scalar_matrix_product(alpha, matrix_variable):
return [[alpha * i for i in t] for t in matrix_variable]
matrix_x = [[2, 2], [2, 2], [2, 2]]
matrix_y = [[2, 5], [2, 1]]
matrix_z = [[2, 4], [5, 3]]
matrix_w = [[2, 5], [1, 1], [2, 2]]
print(scalar_matrix_product(3, matrix_x)) #Expected value: [[6, 6], [6, 6], [6, 6]]
print(scalar_matrix_product(2, matrix_y)) #Expected value: [[4, 10], [4, 2]]
print(scalar_matrix_product(4, matrix_z)) #Expected value: [[8, 16], [20, 12]]
print(scalar_matrix_product(3, matrix_w)) #Expected value: [[6, 15], [3, 3], [6, 6]]
11. 행렬 곱셈 가능 여부 (is product availability matrix)
두 개의 matrix가 입력 되었을 경우, 두 matrix의 곱셈 연산의 가능 여부를 True 또는 False로 반환함
def is_product_availability_matrix(matrix_a, matrix_b):
return len([column_vector for column_vector in zip(*matrix_a)]) == len(matrix_b)
def is_product_availability_matrix2(matrix_a, matrix_b):
return True and len(matrix_a[0]) == len(matrix_b)
matrix_x = [[2, 5], [1, 1]]
matrix_y = [[1, 1, 2], [2, 1, 1]]
matrix_z = [[2, 4], [5, 3], [1, 3]]
print(is_product_availability_matrix(matrix_y, matrix_z)) # Expected value: True
print(is_product_availability_matrix(matrix_z, matrix_x)) # Expected value: True
print(is_product_availability_matrix(matrix_z, matrix_w)) # Expected value: False //matrix_w가없습니다
print(is_product_availability_matrix(matrix_x, matrix_x)) # Expected value: True
12. 행렬 곱셈 (matrix product)
곱셈 연산이 가능한 두 개의 matrix의 곱셈을 실행하여 반환함
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 matrix_a]
matrix_x= [[2, 5], [1, 1]]
matrix_y = [[1, 1, 2], [2, 1, 1]]
matrix_z = [[2, 4], [5, 3], [1, 3]]
print(matrix_product(matrix_y, matrix_z)) # Expected value: [[9, 13], [10, 14]]
print(matrix_product(matrix_z, matrix_x)) # Expected value: [[8, 14], [13, 28], [5, 8]]
print(matrix_product(matrix_x, matrix_x)) # Expected value: [[9, 15], [3, 6]]
print(matrix_product(matrix_z, matrix_w)) # Expected value: False
사족..
- 인프런에서 강의를 진행하시는 가천대학교 최성철 교수님은 한동대학교 01학번 동문이십니다. 17년 포항 지진 당시 인프런과 함께 한동대학교에 성금을 전달하셨습니다.
'Computer Science > Problem Solving' 카테고리의 다른 글
[실리콘벨리 알고리즘 시리즈] 빠진 숫자 찾기 (Find the Missing Number) 파이썬 풀이 (5) | 2021.06.05 |
---|---|
[프로그래머스] 뉴스 클러스터링 / 2018 카카오 블라인드 1차 / 파이썬 (0) | 2020.05.06 |
[프로그래머스] 캐시 / 2018 카카오 블라인드 1차 / 파이썬 (0) | 2020.05.06 |
[프로그래머스] 다트 게임 / 2018 카카오 블라인드 1차 / 파이썬 (0) | 2020.05.06 |
[프로그래머스] 비밀지도 / 2018 카카오 블라인드 1차 / 파이썬 (0) | 2020.05.06 |