Курс 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. Модуль sys: основы
  3. Протокол управления контекстом
  4. Работа с множествами в Python
  5. Правила именования переменных
  6. Построение графиков в Matplotlib
  7. Курсы Яндекс Практикум
  8. Изменение IP-адреса в Python
  9. Особенности запятых в Python
  10. Подписка на каналы разработчиков
  11. Создание виртуальной среды
  12. JSON-esque в Python
  13. Конвертация коллекций в Python.
  14. Определение относительного пути
  15. Разработка игры Pong с turtle
  16. Декоратор @override
  17. Настройка логгера Logzero
  18. Python defaultdict добавление ключа
  19. Управление ресурсами с контекстными менеджерами
  20. Работа с массивами в Python
  21. Основы работы с базами данных в Python
  22. Создание матрицы в Python
  23. Замена переменных в Python
  24. Очистка входных данных
  25. Сравнение строк в Python
  26. Работа с itertools
  27. Форматирование данных с помощью pprint
  28. Многопроцессорное программирование в Python
  29. Активация Matplotlib в Jupyter
  30. Игра «Камень, ножницы, бумага» — Python
  31. Закрытие файла в Python
  32. Объединение списков с помощью zip
  33. Лямбда-функции в Python
  34. Создание спинбокса в tkinter
  35. Импорт в Python: список all
  36. Генераторы данных
  37. Создание файла с проверкой ошибки
  38. Получение значений из словарей
  39. Навыки Python: строки, типы данных
  40. Разделение строки в Python
  41. Базовые объекты Python
  42. Обработка StopIteration в Python
  43. Преобразование генераторов в циклы
  44. Ограничение итераций в Python
  45. Избегайте изменяемых аргументов
  46. Работа с YAML в Python
  47. Приоритет операций в Python

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