Курс 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. Переименование файлов в Python
  2. Numpy: объединение массивов
  3. Форматирование строк в Python
  4. Управление памятью в numpy.
  5. Показ всплывающих окон Tkinter
  6. Метод count() для списка
  7. Определение локальных переменных в Python
  8. Создание OrderedDict
  9. Просмотр атрибутов и методов класса
  10. Генераторы списков
  11. Оптимизация памяти с __slots__
  12. Python Enum Weekday Usage
  13. Преобразование Excel в PDF с Spire.XLS
  14. Создание класса в Python
  15. Создание панели меню Tkinter
  16. Установка максимального количества цифр
  17. Профилирование кода на Python
  18. Конкатенация строковых литералов
  19. Метод get() для словарей
  20. Замер времени выполнения кода
  21. Базовые объекты Python
  22. Замена символов в Python
  23. Применение функции map() в Python
  24. Работа с кортежами
  25. Методы __repr__ и __str__ в Python
  26. Работа со строками в Python.
  27. Numpy: использование Ellipsis
  28. Создание новых функций через partial
  29. Кортеж в Python: создание, доступ, изменение
  30. Обмен данными с asyncio.Queue
  31. Принципы LSP и ISP в Python
  32. Основные операции с Numpy
  33. Получение текущей даты и времени с помощью datetime
  34. Функции any() и all() в Python
  35. Курсы Яндекс Практикум
  36. Операторы увеличения и уменьшения в Python
  37. Аннотации типов в Python
  38. Декодирование строк в Python
  39. Повторение и перенос строки
  40. Асинхронное программирование с asyncio
  41. Итераторы в Python
  42. Работа с дробями в Python
  43. Упрощение работы с JSON-данными в Python
  44. Работа с словарями в Python
  45. Удаление файлов с shutil.os.remove()
  46. Создание инструмента обнаружения плагиата
  47. Перемещение и удаление файлов в Python
  48. Определение индекса элемента списка
  49. Объединение словарей в Python 3.5+

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