initial project structure

This commit is contained in:
hoffmeisterda104361 committed 2026-10-20 16:28:38 +02:00
1 parent b201730dfb
commit 252330ddc0
5 files changed
+161 -3

No files matched your search

+1
View File
@@ -0,0 +1 @@
from .compute import matmul, transpose, rot_2d
+125
View File
@@ -0,0 +1,125 @@
"""Utility module providing basic matrix operations.
Functions
---------
- :func:`matmul` – Multiply two matrices.
- :func:`transpose` – Transpose a matrix.
- :func:`rotate` – Rotate a matrix 90° clockwise.
All functions work on nested Python lists and perform basic
validation before operation.
"""
from __future__ import annotations
Matrix = list[list[float]]
def main():
a = [[1, 2, 3], [4, 5, 6]]
b = [[7, 8], [10, 11], [12, 13]]
print(matmul(a,b))
print(rotate(a))
print(transpose(a))
def matmul(a: Matrix, b: Matrix) -> Matrix:
"""Return the product of two matrices.
Parameters
----------
a: Matrix
Left‑hand matrix (shape ``m × n``).
b: Matrix
Right‑hand matrix (shape ``n × p``).
Returns
-------
Matrix
Resulting matrix of shape ``m × p``.
Raises
------
ValueError
If the inner dimensions of the matrices do not match, or if
either argument is empty.
"""
if not a or not a[0] or not b or not b[0]:
raise ValueError("Input matrices must be non‑empty")
n_cols_a = len(a[0])
n_rows_b = len(b)
if n_cols_a != n_rows_b:
raise ValueError(
f"Inner dimensions must agree for matrix multiplication: "
f"{len(a)}×{n_cols_a} and {n_rows_b}×{len(b[0])}"
)
m = len(a)
p = len(b[0])
result: Matrix = [[0.0 for _ in range(p)] for _ in range(m)]
for i in range(m):
for j in range(p):
total = 0.0
for k in range(n_cols_a):
total += a[i][k] * b[k][j]
result[i][j] = total
return result
def transpose(matrix: Matrix) -> Matrix:
"""Return the transpose of a matrix.
Parameters
----------
matrix: Matrix
A matrix represented as a list of row lists.
Returns
-------
Matrix
The transposed matrix.
Raises
------
ValueError
If the matrix is empty or rows are not of equal length.
"""
if not matrix or not matrix[0]:
raise ValueError("Input matrix must be non‑empty")
row_length = len(matrix[0])
for row in matrix:
if len(row) != row_length:
raise ValueError("All rows in the matrix must have the same length")
return [list(col) for col in zip(*matrix)]
def rot_2d(matrix: Matrix) -> Matrix:
"""Return the matrix rotated 90 degrees clockwise.
This is equivalent to transposing the matrix and then reversing
each row.
Parameters
----------
matrix: Matrix
A matrix represented as a list of row lists.
Returns
-------
Matrix
The rotated matrix.
Raises
------
ValueError
If the matrix is empty or rows are not of equal length.
"""
transposed = transpose(matrix)
return [list(reversed(row)) for row in transposed]
if __name__ == "__main__":
main()
"""End of module"""