Курс 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. Создание коллекций из выражения-генератора
  2. Генераторы словарей и множеств
  3. Функции min(), max(), sum()
  4. Преобразование строк в числа с плавающей запятой
  5. Аннотации типов в Python
  6. Работа с датой и временем в Python
  7. Глобальные переменные в Python
  8. Ускорение кода с помощью векторизации
  9. Проверка наличия элемента в списке
  10. ChainMap.new_child() — добавление нового словаря
  11. Использование super() в Python
  12. Измерение времени выполнения кода
  13. Блок else в Python
  14. Метод getitem для доступа к элементам последовательности
  15. Распаковка аргументов в Python
  16. Особенности ключей словаря в Python
  17. Оператор is в Python
  18. Повторение элементов в Python
  19. Нарезка списков в Python
  20. Логирование с Logzero
  21. Тайное преобразование типа ключа
  22. Блок else в циклах.
  23. Работа с кортежами
  24. Лямбда-функции в Python
  25. Python-dateutil — работа с датами
  26. Установка пакетов с помощью pip
  27. Аннотации типов в Python
  28. Замена символов в строке
  29. Декодирование байтов в строку
  30. Списки: объединение, изменение
  31. Генераторы в Python
  32. Метод setdefault() в Python
  33. Работа с URL-адресами в Python
  34. Игра Виселица на Python
  35. Метод splitlines() для разделения строк
  36. Декораторы в Python
  37. Инверсия списка и строки
  38. Тестирование с responses
  39. Поиск самого длинного слова в списке с использованием max()
  40. Python defaultdict добавление ключа
  41. Howdoi — получение ответов из терминала
  42. Работа с модулем cmath
  43. Логический оператор «and» в Python
  44. Библиотека funcy: удобные утилиты
  45. Создание панели меню Tkinter
  46. Метод __imod__ для Python

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