Курс 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. Форматирование вывода списков
  2. Функция product() в Python
  3. Создание новых списков
  4. Метод join для объединения строк
  5. Методы обработки строк в Python
  6. Закрытие файла в Python
  7. Оптимизация сравнения в Python
  8. Метод __complex__ в Python
  9. Протокол управления контекстом
  10. Отрицательные индексы списков
  11. Добавление цвета в консоли
  12. Преобразование списка в словарь через генератор
  13. Возврат значений из генератора
  14. Создание циклической ссылки
  15. Метод rmatmul для пользовательских матриц
  16. Оптимизация памяти в Python
  17. Создание матрицы в Python
  18. Dict Comprehension в Python
  19. Фильтрация элементов с помощью islice
  20. Применение функции map() в Python
  21. Библиотека itertools: объединение списков
  22. Удаление пробелов методом translate()
  23. Оператор «or» в Python
  24. Раздувающийся словарь в Python
  25. Оптимизация строк в Python
  26. Аргумент по умолчанию
  27. Работа с кортежами в Python
  28. Перевод текста с Python Translator
  29. Проверка элемента в множестве.
  30. Замена символов в Python
  31. Область видимости переменных
  32. Именованные аргументы в Python
  33. Создание новых списков в Python
  34. Генераторы списков в Python
  35. Равенство и идентичность в Python
  36. Возврат нескольких значений
  37. Форматирование даты с strftime()
  38. Работа с itertools
  39. Списковое включение в Python
  40. Использование двоеточия в Python
  41. Работа с байтовыми строками в Python
  42. Операторы объединения в Python 3.9
  43. Извлечение статей с newspaper3k
  44. Возврат нескольких значений из функции
  45. Оператор «not» в Python
  46. Логирование с Logzero
  47. Python itertools combinations() — группировка элементов
  48. Декоратор Property в Python

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