Перейти к основному содержимому

Домашнее задание 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.

  1. Придумать и реализовать простейшую хэш-функцию (дать краткое текстовое описание в комментариях в коде) для матрицы в методе __hash__ (вынести в примесь)
  2. Ограничение на хэш-функцию — она должна быть не константой (не возвращать всегда одно число)
  3. Настроить кэширование произведения матриц по этой хэш-функции
  4. Найти коллизию в хэш-функции (если поиск производится кодом, то код также нужно выложить)

Артефакт — 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 @ B
  • CD.txt — настоящий результат произведения C @ D
  • hash.txt — хэш матриц AB и CD