Курс 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. Метод __iand__ для пользовательских классов
  2. Перегрузка операторов в Python
  3. Отправка поздравлений по дню рождения
  4. Объединение списков в Python.
  5. Оптимизация памяти с __slots__
  6. Область видимости переменных
  7. Оператор распаковки в Python
  8. Оператор += для объединения строк
  9. Область видимости переменных
  10. Объединение словарей в Python
  11. Работа с GitHub в Telegram
  12. Логирование с Logzero
  13. Работа с Event() в threading
  14. Метод get для словарей
  15. Блок else в циклах.
  16. Применение функции к списку
  17. Отступы в Python
  18. Удаление файлов с shutil.os.remove()
  19. Основы работы со списками
  20. Базовые объекты Python
  21. Использование функции enumerate()
  22. Объединение списков в Python
  23. Сортировка с помощью параметра key
  24. Многострочные строки в Python
  25. Работа с функцией next() в Python
  26. Метод lt для сортировки объектов
  27. Переопределение метода divmod
  28. Роль object и type в Python
  29. Проверка окончания строки с помощью str.endswith()
  30. Хеширование паролей с использованием salt
  31. Python: цикл for и оператор присваивания
  32. Переопределение метода len
  33. Поиск подстроки в строке
  34. Оптимизация памяти с __slots__
  35. Добавление элементов в список
  36. Хранение данных
  37. Сортировка в Python
  38. Метод __irshift__ для Python
  39. Оптимизация памяти с помощью __slots__
  40. Импорт в Python: список all
  41. Переворот списка в Python
  42. Метод ifloordiv для пользовательских классов
  43. Вывод переменной и строки в Python
  44. Открытие и редактирование скриптов Python
  45. Метод join() для объединения элементов в строку.
  46. Оператор in для Python

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