Курс 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. Фильтрация элементов с помощью islice
  2. Генерация UUID в Python
  3. Поиск анаграмм с Counter
  4. Получение ID процесса
  5. Объединение словарей в Python
  6. Комментарии в Python
  7. Эффективная конкатенация строк в Python
  8. Извлечение чисел из текста
  9. Очистка данных с помощью pandas
  10. Декоратор Ajax required
  11. Активация Matplotlib в Jupyter
  12. Работа с множествами в Python
  13. Стать Python-разработчиком
  14. Работа с аргументами командной строки в Python
  15. Модуль Antigravity в Python 3
  16. Работа с контекстным менеджером Pool
  17. Применение функции к элементам списка
  18. Работа с zip-архивами в Python
  19. Реализация метода __abs__ в Python
  20. Установка переменной среды в Python
  21. Метод Self в Python
  22. Использование функции enumerate()
  23. Работа с Path в Python
  24. Лямбда-функции в Python
  25. Рекурсия для обращения строки
  26. Переворот списка в Python
  27. PATCH-запрос с библиотекой requests
  28. Получение текущего времени в Python
  29. Генераторы в Python
  30. Переопределение метода __pow__
  31. Создание вложенных циклов for
  32. Метод count() для списка
  33. Введение в PyTorch
  34. Ограничение итераций в Python
  35. Генераторы словарей и множеств
  36. Работа с getopt
  37. Работа с буфером обмена на Python
  38. Функции высшего порядка в Python
  39. Искажение имен в Python
  40. Настройка вывода в Numpy
  41. None в Python: использование и особенности
  42. Метод count в Python: почему count(», ») возвращает 4?
  43. Использование подчеркивания в REPL
  44. Объединение объектов в Python

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