Курс 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. Изучение объектов с помощью dir()
  2. Проверка версии Python
  3. Работа с deque из collections
  4. Шаблоны и наследование в Flask
  5. Функция all() в Python
  6. Сравнение строк в Python
  7. Создание функций высшего порядка
  8. Динамическая типизация в Python
  9. Генератор чисел Фибоначчи
  10. Создание пар из последовательностей
  11. Бинарный поиск
  12. Операции с кортежами
  13. Библиотека itertools: объединение списков
  14. Показ всплывающих окон Tkinter
  15. Работа с итераторами в Python
  16. Декораторы в Python
  17. Форматирование данных с pprint
  18. Исправление ошибки NameError
  19. Функция rsplit() в Python
  20. Разделение строк методом split()
  21. Метод eq для сравнения объектов
  22. Использование подчеркивания в REPL
  23. Удаление специальных символов
  24. Метод get для словаря
  25. Склеивание строк без циклов
  26. Управление IP-адресами через прокси
  27. Моржовый оператор в Python 3.8
  28. Применение функции к списку
  29. Преобразование range в итератор
  30. Обработка ошибок в Python
  31. Поиск уникальных элементов строкой в Python
  32. Использование двоеточия в Python
  33. Загрузка постов Instagram
  34. Создание пользовательской коллекции в Python
  35. Новшества Flask 2.0
  36. Генератор списка с условием if
  37. List Comprehension Tutorial
  38. Особенности запятых в Python
  39. Создание и операции с дробями
  40. None в Python: использование и особенности
  41. Цикл for с enumerate() в Python
  42. *args и **kwargs в Python
  43. Lambda-функция в Python: использование с map() и sum()
  44. Подсчет элементов в списке с Counter
  45. Делегирование в Python
  46. Блок else в циклах.
  47. Defaultdict в Python
  48. Замена переменных в Python
  49. Установка и использование TensorFlow

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