Курс 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. Оператор is в Python
  2. Обмен переменными в Jupyter
  3. Конвертация текстовых чисел с помощью Numerizer
  4. Настройка вывода в Numpy
  5. Модуль os: работа с файлами и папками
  6. Обмен значений переменных в Python
  7. Решатель судоку на Python с pygame
  8. Кортеж в Python: создание и использование
  9. Возвращение нескольких значений
  10. Потоковый ввод в Python
  11. Аргументы *args и **kwargs
  12. Управление контекстом выполнения
  13. Функции range() в Python
  14. Установка random seed в Python
  15. Обход словаря в Python
  16. Классы данных в Python
  17. Модуль os в Python: работа с файлами
  18. Обработка ошибок в Python
  19. Объединение словарей в Python
  20. Работа с итераторами в Python
  21. Округление банкира в Python
  22. Названия переменных
  23. Numpy: использование Ellipsis
  24. Отрицательные индексы списков в Python
  25. Работа с defaultdictами в Python
  26. Метод __float__ в Python
  27. Работа с эмодзи в Python
  28. Оператор += в Python
  29. Фильтрация последовательности
  30. Модуль pprint: улучшение вывода данных
  31. Работа с географическими данными в Python
  32. Итерация по коллекции в Python
  33. Извлечение чисел из текста
  34. Справка по импортированным модулям
  35. Python groupby() из itertools: работа с повторяющимися элементами
  36. Управление импортом в Python
  37. Копирование списков в Python
  38. Переопределение метода __or__()
  39. split() без разделителя
  40. Работа с датой и временем в Python
  41. Вывод переменной и строки в Python
  42. Создание списка дат
  43. Метод сравнения объектов в Python
  44. Форматирование строк в Python

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