Курс 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. Преобразование данных в Python
  3. Декораторы в Python
  4. Бесконечные списки в Python
  5. Функция divmod() в Python
  6. Преобразование чисел в Python
  7. Создание лямбда-функций
  8. Python Менеджер контекста
  9. Изменение списка срезами
  10. Копирование объектов в Python
  11. Библиотека Emoji: использование смайлов в Python
  12. Создание словарей с defaultdict
  13. Потоковый ввод в Python
  14. Декораторы в Python
  15. Сравнение объектов в Python
  16. Частичное совпадение ввода
  17. Генераторы в Python
  18. Форматирование данных с помощью pprint
  19. Просмотр файла в Jupyter Noteboo
  20. Распаковка с оператором *
  21. Удаление пробелов методом translate()
  22. Python reversed() vs срез[::-1]
  23. Поиск подстроки в строке
  24. Метод remove() для удаления элемента из списка
  25. Вложенные генераторы в Python
  26. Профилирование данных с Pandas.
  27. Классы данных в Python
  28. Декодирование строк в Python
  29. Метод enumerate() в Python
  30. Дизассемблирование Python кода
  31. Различия символов в Python
  32. Создание списка через итерацию
  33. Множества и frozenset
  34. Метод add для класса Vector
  35. Изменение списка срезом
  36. Вычисление времени выполнения
  37. Bootle — простой веб-фреймворк
  38. Документирование функций в Python
  39. Преобразование числа в список цифр
  40. Добавление элемента в список.
  41. Удаление символов новой строки в Python.
  42. Обработка исключения UnboundLocalError
  43. JMESPath в Python
  44. Нахождение разницы между списками в Python
  45. Numpy: объединение массивов
  46. Блок else в циклах Python
  47. Создание итерируемых объектов
  48. Работа с файлами в Python
  49. Функция zip() в Python

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