commit 524c2901cdde3375061386f4e6a49369f0ab151f Author: tilo Date: Thu Oct 16 16:43:14 2025 +0200 initial commit of compute.py diff --git a/numeric/compute.py b/numeric/compute.py new file mode 100644 index 0000000..fbefdf5 --- /dev/null +++ b/numeric/compute.py @@ -0,0 +1,76 @@ +from typing import List +import math + + +def product(factors: List[int]) -> int: + """ + :param factors: A list of factors + :return: The product + """ + if not isinstance(factors, List) or not isinstance(factors[0], int): + raise ValueError("List of integers required") + + result = 1 + + for i in factors: + result *= factors[i] + + return result + + +def matmul(a: List[List[float]], b: List[List[float]]) -> List[List[float]]: + """ + Matrix multiplication + :param a: the first matrix + :param b: the second matrix + :return: + """ + if len(a[0]) != len(b): + raise ValueError("Breath of first matrix must be equivalent to the height of the second") + + result = [] + for i in range(len(a)): + result.append([0] * len(b[0])) + + for i in range(len(a)): + for j in range(len(b[0])): + for k in range(len(b)): + result[i][j] += a[i][k] * b[k][j] + + return result + + +def transpose(matrix: List[List[int]]) -> list[list[int]]: + """ + Transposes any given matrix + :param matrix: A nested list of integers describing a matrix + :return: transposed matrix + :throws: Value error if the parameter is not of the given type + """ + + if not isinstance(matrix, List) or not isinstance(matrix[0], List) or not isinstance(matrix[0][0], int): + raise ValueError("Argument needs to be a nested list of integers") + + result = [] + + for i in range(len(matrix[0])): + result.append([0] * len(matrix)) + + for y in range(len(matrix)): + for x in range(len(matrix[0])): + result[x][y] = matrix[y][x] + + return result + + +def rot_2D(angle) -> list[list[float]]: + """ + Creates a rotation matrix from any given angle + :param angle: The angle (degrees) + :return: The rotation matrix + :throws: Value error if the parsed angle is not of a numeric type + """ + if not isinstance(angle, float) and not isinstance(angle, int): + raise ValueError("The parameter angle must be an instance of a numeric datatype") + + return [[math.cos(angle), -math.sin(angle)], [math.sin(angle), math.cos(angle)]]