[머신러닝을 위한 파이썬] Basic Linear Algebra

2024. 12. 22. 18:14MOOC

벡터와 행렬 연산 함수 정리

아래는 벡터 및 행렬 연산을 위한 함수들의 정의 및 예제를 정리한 내용이다.


1. vector_size_check

  • 벡터 연산 가능 여부를 확인.
  • 코드
def vector_size_check(*vector_variables):
    return all(len(v) == len(vector_variables[0]) for v in vector_variables)

# 실행결과
print(vector_size_check([1, 2, 3], [2, 3, 4], [5, 6, 7]))  # True
print(vector_size_check([1, 3], [2, 4], [6, 7]))          # True
print(vector_size_check([1, 3, 4], [4], [6, 7]))          # False

2. vector_addition

  • 여러 벡터의 합 계산.
  • 코드
def vector_addition(*vector_variables):
    if not vector_size_check(*vector_variables):
        raise ArithmeticError
    return [sum(items) for items in zip(*vector_variables)]

# 실행결과
print(vector_addition([1, 3], [2, 4], [6, 7]))  # [9, 14]
print(vector_addition([1, 5], [10, 4], [4, 7])) # [15, 16]

3. vector_subtraction

  • 여러 벡터의 차 계산.
  • 코드:
     
def vector_subtraction(*vector_variables):
    if not vector_size_check(*vector_variables):
        raise ArithmeticError
    return [items[0] - sum(items[1:]) for items in zip(*vector_variables)]

# 실행결과
print(vector_subtraction([1, 3], [2, 4]))             # [-1, -1]
print(vector_subtraction([1, 5], [10, 4], [4, 7]))   # [-13, -6]

4. scalar_vector_product

  • 스칼라 값을 벡터에 곱함.
  • 코드
def scalar_vector_product(alpha, vector_variable):
    return [alpha * x for x in vector_variable]

# 실행결과
print(scalar_vector_product(5, [1, 2, 3]))  # [5, 10, 15]
print(scalar_vector_product(3, [2, 2]))     # [6, 6]

5. matrix_size_check

  • 행렬 연산 가능 여부를 확인.
  • 코드
def matrix_size_check(*matrix_variables):
    return all(len(m) == len(matrix_variables[0]) and len(m[0]) == len(matrix_variables[0][0]) for m in matrix_variables)

# 실행결과
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_w))  # True
print(matrix_size_check(matrix_x, matrix_y))  # False

6. is_matrix_equal

  • n개의 행렬이 같은지 확인.
  • 코드
def is_matrix_equal(*matrix_variables):
    return all(m == matrix_variables[0] for m in matrix_variables)

# 실행결과
print(is_matrix_equal(matrix_x, matrix_x))  # True
print(is_matrix_equal(matrix_x, matrix_y))  # False

7. matrix_addition

  • 여러 행렬의 합 계산.
  • 코드:
     
def matrix_addition(*matrix_variables):
    if not matrix_size_check(*matrix_variables):
        raise ArithmeticError
    return [[sum(items) for items in zip(*rows)] for rows in zip(*matrix_variables)]

# 실행결과
print(matrix_addition(matrix_x, matrix_y))  # [[4, 7], [4, 3]]

8. matrix_subtraction

  • 여러 행렬의 차 계산.
  • 코드
def matrix_subtraction(*matrix_variables):
    if not matrix_size_check(*matrix_variables):
        raise ArithmeticError
    return [[items[0] - sum(items[1:]) for items in zip(*rows)] for rows in zip(*matrix_variables)]

# 실행결과
print(matrix_subtraction(matrix_x, matrix_y))  # [[0, -3], [0, 1]]

9. matrix_transpose

  • 행렬의 전치 계산.
  • 코드:
def matrix_transpose(matrix_variable):
    return [list(row) for row in zip(*matrix_variable)]

# 실행결과
print(matrix_transpose(matrix_w))  # [[2, 1, 2], [5, 1, 2]]

10. scalar_matrix_product

  • 스칼라 값을 행렬에 곱함.
  • 코드
def scalar_matrix_product(alpha, matrix_variable):
    return [[alpha * element for element in row] for row in matrix_variable]

# 실행결과
print(scalar_matrix_product(3, matrix_x))  # [[6, 6], [6, 6], [6, 6]]

11. is_product_availability_matrix

  • 두 행렬의 곱 가능 여부 확인.
  • 코드:
     
def is_product_availability_matrix(matrix_a, matrix_b):
    return len(matrix_a[0]) == len(matrix_b)

# 실행결과
print(is_product_availability_matrix(matrix_y, matrix_z))  # True

12. matrix_product

  • 두 행렬의 곱 계산.
  • 코드
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, col_b)) for col_b in zip(*matrix_b)] for row_a in matrix_a]

# 실행결과
print(matrix_product(matrix_y, matrix_z))  # [[9, 13], [10, 14]]