Курс 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. UserString в Python
  2. Метод __iand__ для пользовательских классов
  3. Создание и удаление объектов
  4. Преобразование Word в PDF с Spire.Doc
  5. Функция sleep() в Python
  6. Создание словаря с значением по умолчанию
  7. Python: Фильтрация списков с помощью filter()
  8. Метод __irshift__ для Python
  9. Определение функций с необязательными аргументами
  10. ChainMap.new_child() — добавление нового словаря
  11. Использование html-скриптов в Jupyter Notebook
  12. Обрезка изображения с Pillow
  13. Объединение словарей в Python
  14. Подсказки при вводе данных в Python
  15. Функция pow() — возвести число в степень
  16. Анализ текста на русском языке с помощью Pymystem3
  17. Регулярные выражения в Python
  18. Экспорт данных в файл.
  19. Создание инструмента обнаружения плагиата
  20. Импорт модуля из другого каталога
  21. Декоратор Property в Python
  22. Создание списков в Python
  23. Оператор in и not in в Python
  24. Оптимизация памяти с __slots__
  25. Избегайте использования goto
  26. Основные методы NumPy
  27. Непрерывная проверка в Python
  28. Форматирование строк в Python
  29. Блок else в циклах Python
  30. Метод __ilshift__ для битового сдвига влево
  31. Объединение списков с помощью zip
  32. Сортировка данных в Python
  33. Работа с CSV файлами в Python
  34. Импорт модулей в Python 3.12
  35. Функция zip() в Python
  36. Основы Python за 14 дней
  37. Работа с индексами списков
  38. Проблема сравнения словарей
  39. Обработка данных в Python
  40. Атрибуты класса и экземпляра
  41. Подсчет вхождений элементов
  42. Конкатенация строковых литералов
  43. Частичное совпадение пользовательского ввода в Python 3.10
  44. Компиляция регулярных выражений
  45. Оператор * в Python
  46. Обновление шаблона base.html
  47. Декораторы в Python

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