Курс 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. Обработка ошибок ввода данных
  3. Запуск Python из интерпретатора
  4. Группы исключений в Python
  5. Декораторы в Python
  6. Python 3.12: переиспользование кавычек
  7. Генерация случайных чисел в Python
  8. Проекты на Python
  9. Генерация UUID в Python
  10. Python Метод sleep() из time
  11. Создание OrderedDict
  12. Статическая типизация в Python
  13. Декораторы в Python
  14. Метод __iand__ для пользовательских классов
  15. Глубокое копирование объектов
  16. Генераторные функции в Python
  17. Векторизация в Python с NumPy.
  18. Метод get() в Python
  19. Очистка вывода в Python
  20. Работа с контекстными менеджерами
  21. Роль object и type в Python
  22. Присоединение элементов коллекции
  23. Python: динамическая типизация и проверка типов
  24. Перегрузка операторов в Python
  25. Преобразование кортежа в словарь.
  26. Разделение строки на пары ключ-значение.
  27. Работа с процессами в Python
  28. Настройка нарезки списков
  29. Основные операции с Numpy
  30. Список и кортеж в Python
  31. Сортировка слиянием
  32. Bootle — простой веб-фреймворк
  33. Обработка ошибок в Python
  34. Установка и использование pyshorteners
  35. Оператор Walrus: правильное использование
  36. Установка Home Assistant
  37. Удаление ссылок в Python
  38. Метод index() в Python
  39. Переопределение унарных операторов
  40. Работа с итераторами в Python
  41. Работа с timedelta
  42. Создание инструмента обнаружения плагиата
  43. Подсчет элементов в Python
  44. Управление асинхронными задачами на Python.

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