Курс 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. Список и кортеж в Python
  3. Получение обратного списка чисел
  4. Метод сравнения объектов в Python
  5. Форматирование строк в Python
  6. Работа с итераторами в Python
  7. Работа со словарями
  8. Форматирование чисел в Python
  9. Форматирование данных с помощью pprint
  10. Карта бомбоубежищ в Москве и Питере
  11. Поиск с помощью регулярных выражений
  12. Инициализация переменных
  13. Сортировка элементов с OrderedDict
  14. Создание даты из строки ISO
  15. Слияние словарей в Python 3.9
  16. Python 3.12: Псевдонимы типов
  17. Обработка исключений
  18. Комментарии в Python
  19. Форматирование вывода списков
  20. Метод add для класса Vector
  21. Сортировка данных с лямбда-функциями
  22. Округление банкира в Python
  23. Объединение словарей в Python
  24. Antigravity модуль
  25. Применение функции map() в Python
  26. Combobox в Tkinter
  27. Проверка индексов коллекции
  28. Просмотр атрибутов и методов класса
  29. Управление User-Agent в Python
  30. Работа с часовыми поясами в Python.
  31. Преобразование данных в Python
  32. Удаление ключа из словаря
  33. Установка User-Agent в Python
  34. Структуры данных в Python
  35. Работа с deque в Python
  36. Принципы SRP и OCP
  37. Именованные аргументы в Python
  38. Работа с пользовательским вводом
  39. Исправление ошибки NameError
  40. Python: отличительная особенность — отступы
  41. Обработка данных в Python
  42. Метод __complex__ в Python
  43. Измерение времени выполнения кода
  44. Создание вкладок с TKinter
  45. Работа со словарями с defaultdict из collections
  46. Построение графиков в терминале с bashplotlib
  47. Метод __getitem__ в Python

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