Основы NumPy: массивы и векторные вычисления
Матричные вычисления, такие как умножение матриц, построение
разложений матриц, вычисление определителя и др. являются важной
частью любой библиотеки программ для численных расчетов. В отличие от
некоторых языков программирования, таких как MATLAB, в NumPy операция *
— это поэлементное умножение матриц, а не стандартное умножение
матриц из линейной алгебры. В связи с этим в NumPy для умножения
матриц реализована функция dot
как в виде метода объекта типа ndarray
, так и в виде функции из пространства имен numpy
:
In [156]: x = np.array([[1., 2., 3.], [4., 5., 6.]]) In [157]: y = np.array([[6., 23.], [-1, 7], [8, 9]]) In [158]: x Out[158]: array([[1., 2., 3.], [4., 5., 6.]]) In [159]: y Out[159]: array([[ 6., 23.], [-1., 7.], [ 8., 9.]]) In [160]: x.dot(y) Out[160]: array([[ 28., 64.], [ 67., 181.]])
Выражение x. dot(y)
np.dot(x, y)
:In [161]: np.dot(x, y) Out[161]: array([[ 28., 64.], [ 67., 181.]])
Произведение матрицы на согласованный одномерный массив дает одномерный массив:
In [162]: np.dot(x, np.ones(3)) Out[162]: array([ 6., 15.])
Операция @
также выполняет умножение матриц:
In [163]: x @ np.ones(3) Out[163]: array([ 6., 15.])
Модуль numpy.linalg
стандартный набор функций для разложения матриц, а
также вычисления определителя и обратной матрицы. Они реализуются с
помощью тех же стандартных библиотек линейной алгебры, которые
используются в других языках (например, MATLAB и R), таких как BLAS,
LAPACK, или, возможно (в зависимости от вашей сборки NumPy),
проприетарной Intel MKL (Math Kernel Library):
In [164]: from numpy.linalg import inv, qr In [165]: X = np.random.randn(5, 5) In [166]: mat = X.T.dot(X) In [167]: inv(mat) Out[167]: array([[ 1.17126787, 0. 63442101, -0.43366495, 0.12451843, -0.43842659], [ 0.63442101, 20.97155103, 4.85020898, 1.20337434, -25.85438743], [ -0.43366495, 4.85020898, 1.82425292, 0.15709542, -6.39429734], [ 0.12451843, 1.20337434, 0.15709542, 0.33177322, -1.54477735], [ -0.43842659, -25.85438743, -6.39429734, -1.54477735, 32.3946724 ]]) In [168]: mat.dot(inv(mat)) Out[168]: array([[ 1.00000000e+00, 4.44089210e-16, 0.00000000e+00, -1.38777878e-17, -4.44089210e-16], [ 0.00000000e+00, 1.00000000e+00, 7.10542736e-15, 0.00000000e+00, -2.84217094e-14], [ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 8.88178420e-16, -1.42108547e-14], [-4.44089210e-16, -1.42108547e-14, -3.55271368e-15, 1.00000000e+00, 1.42108547e-14], [ 0.00000000e+00, -1.42108547e-14, -3.55271368e-15, 8.88178420e-16, 1.00000000e+00]]) In [169]: q, r = qr(mat) In [170]: r Out[170]: array([[-1.98177521, -1.01858515, -3.90022484, -1.74739689, -1.69358168], [ 0. , -8.4068366 , -5.93064791, -5.55543324, -8.16388208], [ 0. , 0. , -1.63499732, -2.80467309, -0.45129639], [ 0. , 0. , 0. , -3.17546169, -0.14914608], [ 0. , 0. , 0. , 0. , 0.02382757]])
В таблице представлены наиболее часто используемые функции линейной алгебры.
Таблица 6. Часто используемые функции модуля numpy.linalg
Функция | Описание |
diag | Возвращает диагональные элементы квадратной матрицы в виде одномерного массива или преобразует одномерный массив в квадратную матрицу с нулями вне диагонали |
dot | Умножение матриц |
trace | След матрицы — сумма диагональных элементов |
det | Определитель матрицы |
eig | Вычисляет собственные значения и собственные векторы квадратной матрицы |
inv | Вычисляет обратную матрицу |
pinv | Вычисляет псевдообратную матрицу Мура—Пенроуза |
qr | Вычисляет \( QR \) разложение матрицы |
svd | Вычисляет сингулярное разложение матрицы (SVD) |
solve | Решает линейную систему \( A x = b \), где \( A \) — квадратная матрица |
lstsq | Находит решение линейной системы \( Ax = b \) методом наименьших квадратов |
- ← Prev
- Next →
«Компьютерное моделирование в среде MatLab»
«Компьютерное моделирование в среде MatLab»
1 2 3 4 5 6 7 8 9 … 15 Байланысты:
1 2 3 4 5 6 7 8 9 … 15 ©emirsaba.org 2023 | Басты бет Lessons Curriculum vitae Documents |
Умножение матриц в Matlab | Как выполнить умножение матриц?
Слово «Matlab» означает лабораторию Matrix. Изначально Matlab предназначался для выполнения матричных операций. Используя Matlab, мы можем очень легко реализовать сложные операции и задачи. Как мы знаем, в матричных операциях умножение является одной из сложных и сложных операций, но с помощью простой команды «mtimes» мы умножаем две матрицы.
Есть некоторые правила умножения матриц, как и в математике. Если матриц две, то количество столбцов первой матрицы должно быть равно количеству строк второго столбца. Предположим, что размеры первой матрицы составляют 2 строки и 3 столбца, а размеры второй матрицы — 4 строки и 3 столбца, тогда мы не можем выполнить умножение, поскольку количество столбцов в первой матрице и количество строк во второй матрице не совпадают.
Как выполнить умножение матриц в Matlab?
Существует два способа умножить матрицу на единицу с помощью оператора умножения «*». И во-вторых, с помощью команды «mtimes».
Использование оператора «*»
Чтобы сначала умножить две матрицы, нам нужны две матрицы. мы можем напрямую объявить матрицы или принять ввод от пользователя. Вот некоторые из шагов, которые нам нужно выполнить, как указано ниже:
- Шаг 1: принять две матрицы, объявив две переменные.
- Шаг 2: назначьте 3 rd переменную для вывода и запишите оператор как матрица 1 * матрица 2.
- Шаг 3: Отображение выходных данных.
Использование команды «mtimes»
В этом методе нет необходимости в операторах, мы можем дать прямую команду входной матрице. Оператор может быть записан как mtimes (матрица 1, матрица 2)
- Шаг 1: принять две матрицы, объявив две переменные.
- Шаг 2: назначить переменную 3 rd для вывода и дать команду mtimes.
- Шаг 3: Отображение выходных данных.
Примеры выполнения умножения матриц
Ниже приведены некоторые примеры умножения матриц в Matlab:
Пример №1
Рассмотрим две матрицы mat1 и mat2, 3
3 4 2
3 2 1
мат 2 =
1 1 1
3 4 2
3 2 1
Использование оператора «*»
В следующей таблице показан приведенный выше пример с использованием оператора «*».
Редактор Matlab | Выход |
мат1 = [ 1 2 3 ; 3 4 2 ; 3 2 1 ] мат2=[ 1 1 1; 3 4 2 ; 3 2 1 ] мат3 = мат1 * мат2 | мат1 = 1 2 3 3 4 2 3 2 1 мат2 = 1 1 1 3 4 2 3 2 1 мат3 = 16 15 8 21 23 13 12 13 8 |
Выходные данные:
Использование команды «mtimes»
В следующей таблице показан приведенный выше пример с использованием команды «mtimes».
Редактор Matlab | Выход |
мат1= [ 1 2 3 ; 3 4 2 ; 3 2 1 ] мат2=[ 1 1 1 ; 3 4 2 ; 3 2 1 ] мат4= mtimes ( мат1 , мат2 ) | мат1 = 1 2 3 3 4 2 3 2 1 мат2 = 1 1 1 3 4 2 3 2 1 мат4 = 16 15 8 21 23 13 12 13 8 |
Выход:
Пример № 2
Давайте рассмотрим два матрицы и мат 2 —
MAT1 =
23 32 110003
22 3 2
16 39 21
32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 3222 2 2 2 2
16 39 23
32 32 32 32 32 32 32 4 1mat2 =
41 11 43
32 41 32
3 2 1
вторые 1
3 столбца, поэтому количество столбцов первой матрицы равно количеству строк второй матрицы, поэтому можно выполнить умножение.
Использование оператора «*»
В следующей таблице показан приведенный выше пример с использованием оператора «*».
Редактор Matlab | Выход |
мат1 = [ 23 , 32 , 11 ; 22 3 2 ; 16 39 21 ; 32 4 1 ] мат2 = [ 4 1 11 43 ; 32 41 32 ; 3 2 1 ] мат3 = мат1 * мат 2 | мат1 = 23 32 11 22 3 2 16 3921 32 4 1 мат2 = 41 11 43 32 41 32 3 2 1 мат3 = 2000 1587 2024 1004 369 1044 1967 1817 1957 1443 518 1505 |
Вывод:
Использование команды «mtimes»
В следующей таблице показан приведенный выше пример с использованием команды «mtimes».
Редактор Matlab | Выход |
мат1 = [ 23 , 32 , 11 ; 22 3 2 ; 16 39 21 ; 32 4 1 ] мат2 = [ 41 11 43 ; 32 41 32 ; 3 2 1 ] мат4 = mtimes ( мат1 , мат2 ) | мат1 = 23 32 11 22 3 2 16 39 21 32 4 1 мат2 = 41 11 43 32 41 32 3 2 1 мат4 = 2000 1587 2024 1004 369 1044 1967 1817 1957 1443 518 1505 |
Выход:
Пример № 3
Предположим, что две матрицы — MAT1 и MAT2,
MAT1 =
5 6 3 2
3 2 4 5
3 2 2 2 2 2 2
3 4 5
3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 100020003
mat2 =
3 4 2
2 3 4
3 3 4
поэтому количество столбцов первой матрицы не равно количеству строк второй матрицы, поэтому умножение не может быть выполнено.
Редактор Matlab | Выход |
мат1= [ 5 6 3 2 ; 3 2 4 5 ; 3 2 1 1 ] мат2= [ 3 4 2 ; 2 3 4 ; 3 3 4 ] мат3= мат1 * мат2 | мат1 = 5 6 3 2 3 2 4 5 3 2 1 1 мат2 = 3 4 2 2 3 4 3 3 4 Ошибка при использовании * Внутренние размеры матрицы должны совпадать. |
Вывод:
Заключение
Умножение матриц — очень сложная и сложная операция в математике, но мы реализуем то же самое в Matlab, мы можем легко получить вывод без ошибок. Оба метода, используемые для умножения матриц, легки и просты в реализации. Это делает программу более эффективной.
Рекомендуемые статьи
Это руководство по умножению матриц в Matlab. Здесь мы обсуждаем, как выполнить умножение матриц в Matlab вместе с примерами. Вы также можете прочитать следующие статьи, чтобы узнать больше –
- Умножение матриц в Java
- 3D Матрица в MATLAB
- Матрица в Matlab
- Matlab И Оператор
Почему MATLAB так быстро умножает матрицы?
Проще говоря, мы говорим, что Поскольку MATLAB изначально создавался для численной линейной алгебры (манипуляции с матрицами), в нем есть библиотеки, специально созданные для умножения матриц. Одна и та же программа запускается для каждого элемента данных, что снижает потребность в сложном управлении потоком. Кроме того, поскольку программа работает со многими элементами данных и имеет высокую интенсивность арифметических вычислений, вместо кэширования больших данных можно использовать вычисления, чтобы скрыть задержку доступа к памяти. вот почему MATLAB так быстр в умножении матриц.
Насколько быстро выполняется умножение матриц?Количество умножений, необходимых для нахождения произведения матрицы, растет гораздо быстрее, чем количество сложений. Чтобы найти произведение матриц два на два, требуется восемь промежуточных умножений, тогда как для нахождения произведения матриц четыре на четыре требуется 64.
Как MATLAB умножает матрицы? Умножение матриц возможно, только если количество столбцов n в U равно количеству строк n в V. При умножении матриц элементы первой строки матрицы умножаются на элементы столбцов второй матрицы. Если U — матрица размера m x n, а V — матрица размера n x p, их можно объединить, чтобы получить матрицу размера m x p Z.
Сумма произведений элементов в i-й строке первой матрицы и соответствующего элемента в j-м столбце второй матрицы дает каждый элемент в (i, j)-й позиции конечной матрицы Z. Оператор * используется в MATLAB для выполнения матричного умножения.
Пример 1:
|
Выход:
Файл отображает следующий результат, когда вы запускаете
Самый быстрый алгоритм для умножения:.