Курс 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. Enum в Python
  2. Очистка данных в Python
  3. Поиск подстроки в строке
  4. Удаление элемента из списка
  5. Генератор бросков кубиков
  6. Функции map() и reduce() в Python
  7. Библиотека itertools: объединение списков
  8. Метод setitem в Python
  9. Подсчет элементов в Python
  10. Преобразование чисел в Python
  11. Определение наиболее частого элемента с помощью collections.Counter
  12. Избегайте изменяемых аргументов
  13. Создание новых списков через list comprehensions
  14. Возврат нескольких значений
  15. Работа с географическими данными.
  16. Ограничение ресурсов в Python
  17. Регистрация на TenChat
  18. Подчеркивание в REPL
  19. Хэш-функции в Python
  20. Python Тесты и Гайды
  21. Работа с *args и **kwargs в Python
  22. Фильтрация последовательности
  23. Оператор continue в Python
  24. Цикл for в Python
  25. Измерение времени выполнения кода
  26. Создание тестовых данных с Faker
  27. Библиотека funcy: удобные утилиты
  28. Обработка исключений в Python
  29. Метод join() для объединения строк
  30. Работа с буфером обмена на Python
  31. Методы в Python
  32. Удаление дубликатов из списка
  33. Генераторы в Python
  34. Создание итератора
  35. Конкатенация строк в Python
  36. Декораторы в Python
  37. Функции range() в Python
  38. Метод split() в Python
  39. split() — разделение строки
  40. Работа с процессами в Python
  41. Работа с WindowsPath()
  42. Игра «Камень, ножницы, бумага» — Python
  43. Поиск наиболее частого элемента в списке
  44. Измерение времени выполнения кода
  45. Переименование файлов в Python
  46. Извлечение данных из JSON

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