Vytvořte balíček algebra
obsahující dva moduly matrix.py
a vector.py
. Nezapomínejte na docstring u funkcí.
Modul vector.py
obsahuje funkci dot_product(vector_1, vector_2)
, která počítá skalární součin dvou stejně dlouhých vektorů (vektor reprezentujeme jako seznam).
Například tedy:
from algebra.vector import dot_product
vector_1 = [1, 2, 3]
vector_2 = [3, 2, 1]
assert dot_product(vector_1, vector_2) == 10
Modul matrix.py
obsahuje funkce matrix_multiplication(matrix_1, matrix_2)
, matrix(shape)
a submatrix(matrix, rows_id, columns_id)
.
Funkce matrix_multiplication(matrix_1, matrix_2)
vykonává násobení dvou matic. V implementaci využíjte funkci algebra.vector.dot_product()
. Matice můžete reprezentovat jako seznam (mutovatelnost se nám již hodí).
Například tedy:
from algebra.matrix import dot_product
matrix_1 = [
[1, -2, 5, 20],
[0, 2, 3, 4],
[100, 2, 3, 4]
]
matrix_2 = [
[10, -2],
[0, 20],
[100, 2],
[2, 10]
]
assert matrix_multiplication(matrix1, matrix2) == [[550, 168], [308, 86], [1308, -114]]
Funkce matrix(shape, fill)
vytvoří matici o rozměrech shape
(tuple
, například (2, 4)
, 2 řádky, 4 sloupce) a všechny prvky vyplní hodnotou fill
(například, číslo 1.0
).
from algebra.matrix import matrix
matrix_1 = matrix((3, 2), 1.0)
assert matrix_1 == [[1.0, 1.0], [1.0, 1.0], [1.0, 1.0]]
# opatrně, musí změnit hodnotu pouze na indexu 0,0 nikoli nikde jinde!
matrix_1[0][0] = 0.0
assert matrix_1[0][0] == 0
assert matrix_1[1][0] == 1.0
Funkce submatrix(matrix, drop_rows, drop_columns)
vrací podmatici předané matice (pozor je nutné vytvořit matici novou, nikoli modifikovat matici předanou). Podmatice vznikne odebráním všech řádků na indexech uvedených v parametru drop_rows
, obdobně potom pro sloupce v parametru drop_columns
. Výchozí hodnoty těchto argumentů jsou prázdné seznamy, v takovém případě dojde ke kopii předaného seznamu. Původní matici nemodifikujte!
Pokud bude submatrix
voláno bez drop_rows
a drop_columns
vznikne nová matice se stejným obsahem jako byl argument matrix
(nepoužívejte copy()
).
from algebra.matrix import submatrix
matrix = [
[1, -2, 5, 20],
[0, 2, 3, 4],
[100, 2, 3, 4]
]
result = submatrix(matrix, drop_rows=[0, 1], drop_columns=[0])
assert result == [[2, 3, 4]]
assert matrix == [[1, -2, 5, 20], [0, 2, 3, 4], [100, 2, 3, 4]]
from algebra.matrix import submatrix
matrix = [
[1, -2, 5, 20],
[0, 2, 3, 4],
[100, 2, 3, 4]
]
result = submatrix(matrix, drop_columns=[0])
assert result == [[-2, 5, 20], [2, 3, 4], [2, 3, 4]]
assert matrix == [[1, -2, 5, 20], [0, 2, 3, 4], [100, 2, 3, 4]]
Odstranění všech řádků:
from algebra.matrix import submatrix
matrix = [
[1, -2, 5, 20],
[0, 2, 3, 4],
[100, 2, 3, 4]
]
result = submatrix(matrix, drop_rows=[0, 1, 2])
assert result == []
assert matrix == [[1, -2, 5, 20], [0, 2, 3, 4], [100, 2, 3, 4]]
Kopie matice:
from algebra.matrix import submatrix
matrix = [
[1, -2, 5, 20],
[0, 2, 3, 4],
[100, 2, 3, 4]
]
result = submatrix(matrix)
assert result == matrix
assert id(result) != id(matrix)
Funkčnost řešení ověříte následujícím příkazem:
pytest