Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Операції з матрицями за допомогою scipy.linalg | Лінійна алгебра та операції з матрицями
Вступ до SciPy

Операції з матрицями за допомогою scipy.linalg

Свайпніть щоб показати меню

Коли виникає потреба виконувати розширені операції з матрицями в Python, модуль scipy.linalg надає потужний набір інструментів, які розширюють можливості функцій лінійної алгебри NumPy. Хоча numpy.linalg підходить для багатьох стандартних завдань, scipy.linalg пропонує додаткові алгоритми, кращу продуктивність для окремих операцій і доступ до низькорівневих процедур із бібліотек BLAS та LAPACK. Це робить scipy.linalg переважним вибором для наукових і інженерних застосувань, які потребують надійних і ефективних обчислень з матрицями.

1234567891011121314151617
import numpy as np from scipy.linalg import blas # Create two matrices A = np.array([[1, 2], [3, 4]]) B = np.array([[2, 0], [1, 2]]) # Perform matrix multiplication using BLAS's dgemm (double-precision general matrix multiply) C = blas.dgemm(alpha=1.0, a=A, b=B) print("Matrix A:") print(A) print("\nMatrix B:") print(B) print("\nA multiplied by B using BLAS:") print(C)

У цьому прикладі коду показано, як перемножувати матриці за допомогою scipy.linalg.blas.dgemm, що є прямим інтерфейсом до бібліотеки BLAS. Ця функція особливо корисна, коли потрібне високопродуктивне множення матриць, оскільки використовує оптимізовані низькорівневі процедури.

Для матриць AA (m×km \times k) і BB (k×nk \times n) добуток CC (m×nm \times n) обчислюється так:

Cij=l=1kAilBljC_{ij} = \sum_{l=1}^k A_{il} B_{lj}

Функція dgemm виконує цю операцію ефективно за допомогою процедур BLAS. Також можна масштабувати результат за допомогою параметра alpha, тому обчислена матриця має вигляд:

C=αABC = \alpha \cdot A \cdot B

Використовуйте dgemm, якщо потрібно контролювати такі параметри, як коефіцієнти масштабування (alpha), або при роботі з великими масивами, де критично важлива продуктивність.

1234567891011121314151617181920
import numpy as np from scipy.linalg import lu, solve # Define a square matrix and a right-hand side vector A = np.array([[3, 1, 6], [2, 1, 3], [1, 1, 1]]) b = np.array([12, 7, 3]) # Perform LU decomposition P, L, U = lu(A) print("Permutation matrix P:") print(P) print("\nLower triangular matrix L:") print(L) print("\nUpper triangular matrix U:") print(U) # Solve the linear system Ax = b x = solve(A, b) print("\nSolution to Ax = b:") print(x)

У цьому прикладі коду демонструється LU-розклад і розв'язання лінійної системи. LU-розклад розкладає матрицю A на три матриці P, L та U так, що:

PA=LUP A = L U

де:

  • P — матриця перестановки, яка враховує перестановки рядків;
  • L — нижня трикутна матриця з одиницями на діагоналі;
  • U — верхня трикутна матриця.

Ця факторизація допомагає ефективно розв'язувати лінійну систему Ax = b. Спочатку застосовується перестановка до правої частини:

PAx=LUx=PbP A x = L U x = P b

Позначимо y як проміжну змінну. Розв'язання відбувається у два кроки:

  1. Прямий хід: розв'язати Ly=PbL y = P b відносно y;
  2. Зворотний хід: Ux=yU x = y відносно x.

Цей підхід особливо корисний, коли потрібно розв'язати кілька систем з однаковою матрицею A, але різними правими частинами, оскільки LU-розклад обчислюється лише один раз.

1. Яка основна відмінність між scipy.linalg та numpy.linalg?

2. Яку функцію слід використовувати для розв'язання системи лінійних рівнянь у SciPy?

3. Яке призначення LU-розкладу в лінійній алгебрі?

question mark

Яка основна відмінність між scipy.linalg та numpy.linalg?

Виберіть правильну відповідь

question mark

Яку функцію слід використовувати для розв'язання системи лінійних рівнянь у SciPy?

Виберіть правильну відповідь

question mark

Яке призначення LU-розкладу в лінійній алгебрі?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 2. Розділ 1
some-alt