Prog3A_JW/lab_01/compute.py
2025-10-30 16:47:01 +01:00

144 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import List
import math
def count_rows_and_columns(matr_a: List[List[int]], matr_b: List[List[int]]) -> List:
"""
counts all rows and columns
:param matr_a: matrix_a
:param matr_b: matrix_b
:return: list of rows and columns of matrix_a and matrix_b
"""
count_ra = 0
count_rb = 0
count_ca = 0
count_cb = 0
for element in matr_a :
if type(element) == list: # Prüfen, ob das Element eine Liste ist
count_ra += 1
for element in matr_b :
if type(element) == list: # Prüfen, ob das Element eine Liste ist
count_rb += 1
count_ca = len(matr_a[0])
count_cb = len(matr_b[0])
if count_ca != count_rb:
raise ValueError("the dimensions of the two matrices dont match")
list_c_r = [count_ra, count_rb, count_ca, count_cb]
#print( "Matrix A has rows:", count_ra ,"und columns:", count_ca,
# "Matrix B has rows:", count_rb, "and columns:", count_cb)
return list_c_r
def matmul (matr_a: List[List[int]], matr_b: List[List[int]]) -> List[List[int]]:
"""
multplies two matrices
:param matr_a: Matrix_A
:param matr_b: Matrix_B
:return: product of Matrix_A and Matrix_B
"""
list_cr = count_rows_and_columns(matr_a, matr_b)
rows_a= list_cr[0]
rows_b = list_cr[1]
columns_a= list_cr[2]
columns_b = list_cr[3]
temp_list = []
c2 = 0
c1 = 0
result = [[0 for _ in range(columns_b)] for _ in range(rows_a)] # durch chat gpt
# if columns_a == rows_b:
# print("all good")
for i in range(rows_a):
for j in range(columns_b):
s = 0
for k in range(columns_a): # durch Chat gpt
s += matr_a[i][k] * matr_b[k][j]
result[i][j] = s
return result
def count_solo(matr_a: List[List[int]]) -> List:
"""
counting rows and columns of one matrix only
:param matr_a: matrix a
:return: the number of list and columns
"""
count_ra = 0
count_ca = 0
for element in matr_a :
if type(element) == list: # Prüfen, ob das Element eine Liste ist
count_ra += 1
count_ca = len(matr_a[0])
list_c_r = [count_ra, count_ca, ]
return list_c_r
def transpose(matr_a: List[List[int]]) -> List[List[int]]:
"""
transposes a matrix
:param matr_a: matrix_a
:return: the transposed matrix
"""
new_list= count_solo(matr_a)
rows = new_list[0]
columns = new_list[1]
trans_mat = [[0 for _ in range(rows)] for _ in range(columns)]
for i in range(rows):
for j in range(columns):
trans_mat[j][i] = matr_a[i][j] #kleine ergänzung durch chatti
return trans_mat
#def rot_2D(rad: float) -> List[List[int]]:
#if rad <= 0:
# return ValueError
# if rad >= 6.29: #2π=2×3,141592653589793=6,283185307179586
# return ValueError
# rot_matr = [
# [math.cos(rad), -math.sin(rad)],
# [math.sin(rad), math.cos(rad)]
# ]
# return rot_matr
def rot_2D(rad: float) -> List[List[float]]:
rot_matr = [
[math.cos(rad), -math.sin(rad)],
[math.sin(rad), math.cos(rad)]
]
return rot_matr
if __name__ == "__main__":
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]
]
print(transpose(matrix))
# Erwartete Ausgabe:
# [
# [1, 4],
# [2, 5],
# [3, 6]
# ]
matr = rot_2D(2)
print(matr)