MatrixMania/compute.py
2025-11-02 12:27:03 +01:00

100 lines
2.4 KiB
Python

import math
from typing import List
from tabulate import tabulate
def matmul(matrix_a:List[List[float]], matrix_b:List[List[float]]) -> List[List[float]]:
"""
calculates matrix multiplication with 2 matrices
:param matrix_a: the first matrix
:param matrix_b: the second matrix
:return: the product of 2 matrices
"""
a_rows = len(matrix_a)
a_columns = len(matrix_a[0])
b_rows = len(matrix_b)
b_columns = len(matrix_b[0])
if not a_columns == b_rows:
raise ValueError("Matrices not valid")
result = []
for i in range(a_rows):
line = []
for j in range(b_columns):
elem = 0
for k in range(a_columns):
elem += matrix_a[i][k] * matrix_b[k][j]
line.append(elem)
result.append(line)
return result
def transpose(matrix:List[List[int]]) -> List[List[int]]:
"""
transposes the matrix
:param matrix: the matrix
:return: the transpose of the matrix
"""
if not matrix:
raise ValueError("Matrices not valid")
rows = len(matrix)
cols = len(matrix[0])
#for i in matrix:
# if rows != cols:
# raise ValueError("Matrices not valid")
result = []
for i in range(cols):
line = []
for j in range(rows):
line.append(matrix[j][i])
result.append(line)
return result
def rot_2D(angle: float) -> List[List[float]]:
rot_matrix = [[math.cos(angle), -math.sin(angle)],
[math.sin(angle), math.cos(angle)]]
return rot_matrix
if __name__ == "__main__":
# created by ChatGPT
matrix_a = [ [3, 4, -1, 4],
[-2, 2, 5, 1]
]
matrix_b = [ [1, 3, -2],
[2, 5, 1],
[-1, 4, -4],
[2, 3, 6]
]
matrix_c = matmul(matrix_a, matrix_b)
print("Ergebnis C = A * B:")
for row in matrix_c:
print(row)
matrix = [
[1, 2, 3],
[4, 5, 6]
]
new_matrix = transpose(matrix)
print("transposed matrix:")
for row in new_matrix:
print(row)
#empty_matrix = []
#transpose(empty_matrix)
theta = math.pi / 2
R = rot_2D(theta)
print("Rotatiosnmatrix für 90 Grad:")
print(R)
p = [[1, 0]]
rotated = matmul(p, R)
print("rotated matrix:")
print(rotated)
print("Matrix A:")
print(tabulate(matrix_a))