Курс Python → Метод matmul для умножения матриц

Класс Matrix в Python представляет собой специальный тип данных, который позволяет работать с матрицами и выполнять над ними различные операции. Одним из таких методов, реализованных в классе Matrix, является метод matmul(self, other), который определяет поведение оператора матричного умножения @. Для того чтобы использовать этот метод, необходимо импортировать класс Matrix из соответствующего модуля.

В методе matmul происходит проверка того, что число столбцов первой матрицы равно числу строк второй матрицы, так как это условие является необходимым для выполнения операции умножения матриц. Если данное условие не выполняется, то будет сгенерировано исключение. После проверки создается матрица, которая будет содержать результат умножения, и заполняется нулями.


class Matrix:
    def __matmul__(self, other):
        if len(self[0]) != len(other):
            raise ValueError("Number of columns in first matrix must be equal to number of rows in second matrix")
        
        result = [[0 for _ in range(len(other[0]))] for _ in range(len(self))]
        
        for i in range(len(self)):
            for j in range(len(other[0])):
                for k in range(len(other)):
                    result[i][j] += self[i][k] * other[k][j]
        
        return Matrix(result)

Далее происходит умножение матриц с использованием вложенных циклов. Каждый элемент результирующей матрицы вычисляется путем умножения соответствующих элементов из первой и второй матрицы, а затем их суммирования. Результат умножения возвращается в виде новой матрицы, содержащей произведение исходных матриц.

Использование оператора @ для умножения матриц позволяет удобно и интуитивно выполнять матричные операции в Python. При необходимости можно переопределить метод matmul для пользовательских классов, чтобы обеспечить поддержку оператора @ и работу с матрицами по определенным правилам или логике. Этот лайфхак особенно полезен при работе с линейной алгеброй и другими задачами, требующими манипулирования матрицами.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Pretty-printing JSON в Python
  2. Замена текста в Python
  3. Оформление кода по PEP 8
  4. Определение объема памяти объекта
  5. Тест скорости набора текста на Python
  6. Утечки переменных цикла в Python 3.x
  7. Поток данных в Python
  8. Работа с комплексными числами
  9. Методы и функции в Python
  10. Оптимизация памяти с slots
  11. Объединение, распаковка и деструктуризация
  12. Pillow: работа с изображениями
  13. Обмен данными с asyncio.Queue
  14. Проверка типов с помощью isinstance
  15. Перемещение и удаление файлов в Python
  16. Поиск частых элементов в списке
  17. Нахождение максимального значения и его индекса в списке
  18. Метод radd для пользовательских чисел
  19. Округление чисел с помощью round
  20. Методы HTTP запросов в Flask
  21. Применение функции к каждому элементу списка
  22. Логические операторы в Python
  23. Тестирование времени с Freezegun
  24. Добавление элемента к кортежу
  25. Замер времени выполнения кода
  26. Преобразование букв в нижний регистр
  27. Роль запятой в Python
  28. Логирование с Logzero
  29. Создание таблиц в Python с PrettyTable
  30. Управление мышью и клавиатурой с Pyautogui
  31. Выход из профиля в Django
  32. Проверка версии Python
  33. Обработка исключений в Python 3
  34. Обработка ошибок в Python
  35. Работа с JSON в Python
  36. Управление асинхронными задачами с помощью Semaphore
  37. Измерение времени выполнения кода
  38. Функции all() и any() в Python
  39. Метод ipow для возведения в степень
  40. Тестирование с unittest
  41. Аннотации типов в Python
  42. Сравнение объектов в Python
  43. Обработка элементов в Python
  44. Удаление элементов из списка в Python.
  45. Хеширование паролей с использованием salt
  46. Оператор walrus в Python

Marketello читают маркетологи из крутых компаний