2025-11-06 16:56:00 +01:00

105 lines
2.8 KiB
Python

from typing import List
import math
from tabulate import tabulate
def matmul(matrix_a: List[List[int]], matrix_b: List[List[int]]) -> List[List[int]]:
"""
Matrix multiplication
:param matrix_a: Matrix A
:param matrix_b: Matrix B
:return: product of matrix_a and matrix_b
:raises: ValueError: wenn Matrix A and Matrix B nicht multipliezierbar sind
"""
if len(matrix_a[0]) != len(matrix_b):
print(len(matrix_a[0]))
print(len(matrix_b))
raise ValueError("Matrix kann nicht multipliziert werden")
ergebnis1 = []
ergebnis2 = []
result = 0
spalte_max = len(matrix_b[0])
zeile = 0
for spalte in range(len(matrix_a)):
for zeile in range(spalte_max):
for z in range(len(matrix_a[0])):
zahl = matrix_a[spalte][z] * matrix_b[z][zeile]
result = result + zahl
ergebnis1.append(result)
result = 0
ergebnis2.append(ergebnis1)
ergebnis1 = []
return ergebnis2
def transpose(matrix: list[list[int]]) -> list[list[int]]:
"""
Transpose a matrix
:param matrix: valid matrix
:return: transpose of matrix
"""
if len(matrix) == 0:
raise ValueError("Matrix leer")
mindest_länge = len(matrix[0])
for zeile in range(len(matrix)):
if len(matrix[zeile]) != mindest_länge :
raise ValueError("Matrix falsch")
anzahl_spalten= len(matrix)
anzahl_zeilen= len(matrix[0])
ergebnis1 = []
ergebnis2 = []
for z in range(anzahl_zeilen):
for s in range(anzahl_spalten):
ergebnis1.append(matrix[s][z])
ergebnis2.append(ergebnis1)
ergebnis1 = []
return ergebnis2
def rot_2D(angle: int) -> List[List[float]]:
"""
Rotation matrix
:param angle: any angle in degrees
:return: rotation matrix
"""
zahl1 = math.cos(math.radians(angle))
zahl2 = -math.sin(math.radians(angle))
zahl3 = math.sin(math.radians(angle))
zahl4 = math.cos(math.radians(angle))
return [[zahl1, zahl2], [zahl3, zahl4]]
def rot_3D(angle: float, axis: str) -> List[List[float]]:
"""
Rotation matrix 3D
:param angle: between 0 and 360 degrees
:param axis: x,y,z axis of rotation matrix
:return: 3D rotation matrix
"""
cos = math.cos(math.radians(angle))
sin = math.sin(math.radians(angle))
if axis == "x":
return [[1,0,0],[0, cos, -sin],[0, sin, cos]]
elif axis == "y":
return [[cos, 0, sin],[0,1,0],[-sin,0,cos]]
elif axis == "z":
return [[cos, -sin, 0],[sin, cos, 0],[0, 0, 1]]
else:
raise ValueError("Not a valid axis. Choose from 'x', 'y', 'z'.")
if __name__ == "__main__":
print(rot_3D(-90, "x"))
print(transpose([
[1, 2, 3],
[4, 5, 6]
]))