Курс 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 3
  2. Функция zip() для объединения списков
  3. Сортировка и разворот списка
  4. Деление в Python
  5. Concrete Paths в Python
  6. Аргумент по умолчанию
  7. Выражения-генераторы в Python
  8. Непрерывная проверка в Python
  9. Деление в Python
  10. Функция enumerate в Python
  11. Фильтрация списка чисел
  12. Транспонирование 2D-массива с помощью zip
  13. Секреты Python
  14. Логирование с Logzero
  15. Python Поверхностное Копирование
  16. capitalize() — изменение регистра первого символа строки
  17. Упрощение работы с JSON-данными в Python
  18. Оператор is в Python
  19. Создание и инициализация объектов
  20. Поиск повторов в списке
  21. Генераторы в Python
  22. Функция format() в Python
  23. Отслеживание прогресса с tqdm
  24. Работа с файловой системой в Python
  25. Регистрация на хакатоне
  26. Методы в Python
  27. ROT13 Шифр Цезаря в Python
  28. Распаковка аргументов в Python
  29. Использование функции enumerate()
  30. Методы __repr__ и __str__ в Python
  31. Создание новой даты в Python
  32. Перетасовка списков в Python
  33. Хеширование паролей с солью
  34. Создание множества в Python
  35. f-строки в формате строк
  36. Преобразование строк в числа с плавающей запятой
  37. Виртуальное окружение Python
  38. Проверка строки на палиндром
  39. Извлечение аудио из видео
  40. Оператор * в Python
  41. Генераторы в Python
  42. Многострочные комментарии в Python
  43. Метод count() для списка
  44. Логирование с Logzero: ротация файла
  45. Использование модуля math
  46. Создание новых списков через list comprehensions

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