Python/데이터 분석 기초

[머신러닝을 위한 파이썬] 1.행렬 연산 구현해보기

동현 유 2021. 3. 18. 19:23

이 글은 boostcourse 강의를 듣고 정리한 글입니다.

 

 

밑에 나오는 구현 예제들은 모두 한줄로 작성이 가능하다!

( 과연 한 줄로 코드를 작성하는 게 더 좋을까...? )

 

 

>>완벽하게 알아야 할 자료구조

  • 리스트
  • 튜플
  • 딕셔너리

 

 

>> 공부해야 할 문법들

  • List Comprehension / Generator
  • Enumerate
  • Zip
  • Lambda
  • Map
  • Asterisk

 

예제는 여기서 확인하자

 

 

>>파이썬 답안 코드

MatirxOperation.zip
0.00MB

#1. 

def vector_size_check(*vector_variables):

    return len(set([ len(vector)  for vector in vector_variables])) == 1

 

#2.

def vector_addition(*vector_variables):

    if vector_size_check(*vector_variables) == False:
        raise ArithmeticError
        
    return [sum(i) for i in zip(*vector_variables)]

 

#3.

def vector_subtraction(*vector_variables):

    if vector_size_check(*vector_variables) == False:
        raise ArithmeticError
        
    return [i[0]*2 - sum(i) for i in zip(*vector_variables)]

 

#4.

def scalar_vector_product(alpha, vector_variable):

    return list(map(lambda x : x * alpha, vector_variable))

 

#5.

def matrix_size_check(*matrix_variables):

    return len(set((len(mat),len(mat[0])) for mat in matrix_variables)) == 1    

 

#6.

def is_matrix_equal(*matrix_variables):

    return all(len(set(row for row in zip(*matrix)))==1 for matrix in zip(*matrix_variables))

 

#7.

def matrix_addition(*matrix_variables):

    if matrix_size_check(*matrix_variables) == False:
        raise ArithmeticError
        
    return [[sum(i) for i in zip(*row)] for row in zip(*matrix_variables)]
    #return [vector_addition(*row) for row in zip(*matrix_variables)]

 

#8.

def matrix_subtraction(*matrix_variables):

    if matrix_size_check(*matrix_variables) == False:
        raise ArithmeticError
        
    return [vector_subtraction(*row) for row in zip(*matrix_variables)]

 

#9.

def matrix_transpose(matrix_variable):

    return [[*i] for i in zip(*matrix_variable)]

 

#10.

def scalar_matrix_product(alpha, matrix_variable):

    return [scalar_vector_product(alpha,row) for row in matrix_variable]

 

#11.

def is_product_availability_matrix(matrix_a, matrix_b):

    return len(matrix_a[0]) == len(matrix_b)

 

#12.

def matrix_product(matrix_a, matrix_b):

    if is_product_availability_matrix(matrix_a, matrix_b) == False:
        raise ArithmeticError
        
    return [[sum(x*y for x,y in zip(row_a,col_b)) for col_b in zip(*matrix_b)] for row_a in matrix_a]