Домашнее задание 3: Библиотека матриц
📚 Лекция: Углубленное ООП
8 дней с момента занятия.
Нужно реализовать небольшую библиотеку для работы с матрицами.
Задача 3.1: Класс матрицы
Сделать класс матрицы, в котором определить операции сложения и умножения (матричного и покомпонентного) через перегрузку операторов +, *, @ (как в numpy). Вызывать исключения, если матрицы на входе некорректной размерности (ValueError).
Сгенерировать две матрицы через np.random.randint(0, 10, (10, 10)) с seed-ом 0 и над ними провести все три операции. Записать результаты в текстовые файлы, названные matrix+.txt, matrix*.txt, matrix@.txt, соответственно.
Артефакт: три текстовых файла с результатами операций.
Задача 3.2: Примеси numpy
Используя примеси numpy (NDArrayOperatorsMixin), сделать класс, который будет уметь выполнять все стандартные арифметические операции.
Также добавить через примеси:
- Запись объекта в файл
- Красивое отображение в консоли (
__str__) - Getter-ы и setter-ы для полей класса
В самих классах должно быть минимальное количество методов.
Артефакты: аналогично задаче 3.1.
Задача 3.3: Хэширование и кэширование
Задача является продолжением задачи 3.1.
- Придумать и реализовать простейшую хэш-функцию (дать краткое текстовое описание в комментариях в коде) для матрицы в методе
__hash__(вынести в примесь) - Ограничение на хэш-функцию — она должна быть не константой (не возвращать всегда одно число)
- Настроить кэширование произведения матриц по этой хэш-функции
- Найти коллизию в хэш-функции (если поиск производится кодом, то код также нужно выложить)
Артефакт — 7 файлов:
A.txt,B.txt,C.txt,D.txt— матрицы, такие что:
(hash(A) == hash(C)) and (A != C) and (B == D) and (A @ B != C @ D)
AB.txt— результат произведенияA @ BCD.txt— настоящий результат произведенияC @ Dhash.txt— хэш матрицABиCD