Курс 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"
- UserString в Python
- Метод __iand__ для пользовательских классов
- Создание и удаление объектов
- Преобразование Word в PDF с Spire.Doc
- Функция sleep() в Python
- Создание словаря с значением по умолчанию
- Python: Фильтрация списков с помощью filter()
- Метод __irshift__ для Python
- Определение функций с необязательными аргументами
- ChainMap.new_child() — добавление нового словаря
- Использование html-скриптов в Jupyter Notebook
- Обрезка изображения с Pillow
- Объединение словарей в Python
- Подсказки при вводе данных в Python
- Функция pow() — возвести число в степень
- Анализ текста на русском языке с помощью Pymystem3
- Регулярные выражения в Python
- Экспорт данных в файл.
- Создание инструмента обнаружения плагиата
- Импорт модуля из другого каталога
- Декоратор Property в Python
- Создание списков в Python
- Оператор in и not in в Python
- Оптимизация памяти с __slots__
- Избегайте использования goto
- Основные методы NumPy
- Непрерывная проверка в Python
- Форматирование строк в Python
- Блок else в циклах Python
- Метод __ilshift__ для битового сдвига влево
- Объединение списков с помощью zip
- Сортировка данных в Python
- Работа с CSV файлами в Python
- Импорт модулей в Python 3.12
- Функция zip() в Python
- Основы Python за 14 дней
- Работа с индексами списков
- Проблема сравнения словарей
- Обработка данных в Python
- Атрибуты класса и экземпляра
- Подсчет вхождений элементов
- Конкатенация строковых литералов
- Частичное совпадение пользовательского ввода в Python 3.10
- Компиляция регулярных выражений
- Оператор * в Python
- Обновление шаблона base.html
- Декораторы в Python















