Курс 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. Обработка StopIteration в Python
  2. Мониторинг работы программы Py-spy
  3. Работа с Path в Python
  4. Удаление дубликатов из списка
  5. Работа с zip-архивами в Python
  6. Закрытие файла в Python
  7. Работа с буфером обмена на Python
  8. Область видимости переменных
  9. Анонимные функции в Python
  10. Подсчет элементов в списке с Counter
  11. Namedtuple в Python
  12. Логирование с Logzero
  13. Оператор match в Python
  14. Метод append() для списка
  15. Итераторы в Python
  16. Фильтрация входных данных в Python
  17. Генераторы в Python
  18. Приоритет операций в Python
  19. Установка Home Assistant
  20. Поиск самого частого элемента
  21. Аргумент по умолчанию
  22. Замена подстроки
  23. Python groupby() из itertools: работа с повторяющимися элементами
  24. Поиск уникальных элементов строкой в Python
  25. Лямбда-функции в Python
  26. Переопределение метода sub
  27. Метод join() для объединения элементов строки
  28. Фильтрация данных в Python.
  29. Преобразование букв в нижний регистр
  30. Замена элементов в списке с помощью генераторов списков
  31. Комментарии в Python
  32. Копирование и вставка текста в Python
  33. Разделение строк в Python
  34. Работа с collections в Python
  35. Назначение максимального и минимального значения переменной в Python.
  36. Сравнение строк в Python
  37. Возврат значений из генератора
  38. Сокращение ссылок с pyshorteners
  39. Python enumerate() для работы с индексами
  40. Чтение бинарного файла в Python.
  41. Импорт в Python: список all
  42. Работа с Telegram API на Python
  43. Поиск с библиотекой Google
  44. Передача аргументов через **arguments
  45. Combobox в Tkinter
  46. Сравнение строк в Python
  47. 9 уловок для чистого кода

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