Курс 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
  2. Установка и обучение ChatterBot
  3. Удаление файлов с shutil.os.remove()
  4. Проверка дублей в списке.
  5. Разделение строк в Python
  6. Объединение словарей в Python
  7. Работа со слайсами
  8. Оператор break в Python
  9. Установка и использование библиотеки google
  10. Создание коллекций из генератора
  11. Метод join() для объединения элементов
  12. Оптимизация памяти в Python
  13. Отношения подклассов в Python
  14. Удаление элемента из списка в Python
  15. Оператор деления для класса Rational
  16. Применение функции к списку
  17. Извлечение статей с newspaper3k
  18. Функция product() из itertools
  19. Метод count() для списков
  20. Работа с файлами в Python
  21. Преобразование чисел в восьмеричную строку
  22. Оператор «and» в Python
  23. Избегайте пустого списка
  24. Вложенные функции в Python
  25. Поиск уникальных и повторяющихся элементов
  26. Magic Commands — улучшение работы с Python
  27. Запуск файлового сервера
  28. Обработка ошибки IndexError
  29. Работа с изменяемыми коллекциями
  30. Функция enumerate() в Python
  31. Строки в Python: апострофы и кавычки
  32. Генераторы в Python
  33. Преобразование списков в словарь
  34. Эффективная конкатенация строк с использованием join()
  35. Удаление элементов во время итерации
  36. Импорт с альтернативным именем
  37. Генераторные функции в Python
  38. Виртуальные среды в Python
  39. Реализация метода __abs__ в Python
  40. Работа с модулем random
  41. Работа с пользовательским вводом
  42. Особенности ключей словаря в Python
  43. Работа с срезами в Numpy
  44. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  45. Разбиение строки в Python
  46. Метод __iand__ для пользовательских классов
  47. Генераторы в Python

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