Курс 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. Динамические маршруты во Flask
  2. Хешируемые ключи в Python
  3. Распаковка с оператором *
  4. Условные выражения в Python
  5. Генерация случайных чисел в Python
  6. Нахождение отличий в списках
  7. Запуск асинхронной корутины
  8. Удаление дубликатов в pandas
  9. Функции в Python: создание и вызов
  10. Многострочные комментарии в Python
  11. Monkey Patching в Python
  12. Генератор бросков кубиков
  13. Проекты на Python
  14. Сравнение def и lambda-функций
  15. Реверс строки в Python
  16. Оператор walrus в Python
  17. Перегрузка операторов в Python
  18. Многострочные комментарии в Python
  19. split() без разделителя
  20. Преобразование строки в число
  21. Расширение операции побитового «и» в Python
  22. Метод add для класса Vector
  23. Генераторы в Python
  24. Блок else в Python
  25. Отладка в Python
  26. Применение функций в Python
  27. Навыки Python: строки, типы данных
  28. Улучшенные подсказки для импорта в Python 3.12
  29. Транспонирование 2D-массива с помощью zip
  30. Преобразование документов в PDF с помощью Spire.Office
  31. Аргумент по умолчанию
  32. Непрерывная проверка в Python
  33. Присоединение элементов коллекции
  34. Работа с контекстным менеджером Pool
  35. Создание директории в Python
  36. Метод count() для списков
  37. Подчеркивание в REPL
  38. Замыкания в Python
  39. Обработка исключений с блоком else
  40. Python enumerate() для работы с индексами
  41. Создание словарей с defaultdict
  42. Основы работы со строками в Python
  43. Функциональное программирование.
  44. Объединение словарей в Python
  45. Получение списка кортежей из словаря

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