Друкарня від WE.UA

Всіх вітаю! У сьогоднішній статті ми поговоримо про метод оберненої матриці та псевдо-обернену матрицю Мура-Пенроуза у бібліотеці numpy, а конкретно розглянемо її пакет linalg для функцій з лінійної алгебри.

Встановлення

Windows:

pip install numpy

MacOS:

pip3 install numpy

Linux:

pip install numpy

Створення матриці

Після встановлення бібліотеки numpy її треба імпортувати, у даному випадку нам треба буде імпортувати не тільки саму бібліотеку безпосередньо, а й її пакет linalg, щоб працювати з матрицею. Імпортуємо те, що треба:

import numpy as np
from numpy.linalg import inv, pinv

З пакету linalg імпортуємо функції inv() та pinv() — функції для знаходження оберненох матриці та псевдо-оберненої матриці Мура-Пенроуза.

Далі нам треба створити матрицю, яку ми і будемо використовувати у подальшому. Створюємо просту матрицю 3х3 або квадратну матрицю:

matrix = np.array([
    [1, 5, -3], 
    [4, 2, 0], 
    [9, 8, -1]
    ])

Ось таким чином ми створили матрицю 3х3. Від того, скільки ви додасте рядків всередині головних квадтаних дужок та значень залежить її розмір.

Знаходження оберненої матриці

Тож, переходимо до знаходження оберненох матриці за допомогою inv(). Перед цим корисно знати, що не для всіх матриць можна знайти обернену матрицю, а тільки якщо ця матриця не є виродженою.

Вироджена матриця — це така матриця, визначник якої дорівнює нулю. І для такої матриці не існує оберненої матриці.

Визначник матриці легко перевірити за допомогою того ж пакету linalg, а тічніше функції det(), яка знаходить визначник матриці. Імпортуємо з пакету linalg також і цю функцію:

from numpy.linalg import inv, pinv, det

Тепер знаходимо визначник нашої матриці. Просто передаємо функції det() нашу матрицю:

matrix_determinant = det(matrix)
print(f"Matrix determinant: {matrix_determinant}")

В результаті бачимо, що вона не є виродженою, бо визначник не дорівнює нулю:

Matrix determinant: -24.000000000000004

Отже, обернена матрця повина повинна існувати для такої матриці, як наша. Нарешті можемо без сумнівів застосувати функцію inv() та передати їх матрицю:

inverse_matrix = inv(matrix)
print(f"Invrse matrix: "
      f"\n{inverse_matrix}")

В результаті отримуємо таку обернену матрицю:

Invrse matrix: 
[[ 0.08333333  0.79166667 -0.25      ]
 [-0.16666667 -1.08333333  0.5       ]
 [-0.58333333 -1.54166667  0.75      ]]

Ще одним важливим критерієм для існування оберненої матриці є її розмір. Матриця повинна бути обов’язково квадратна, бо в іншому випадку вона не може мати оберненої матриці.

Взагалі квадратна матриця — це така матриця, яка має рівну кількість рядків і стовпців, як наша перша матриця.

Пропоную перевірити, чи буде працювати inv() для наступної матриці:

matrix = np.array([
    [1, 5, -3],
    [4, 2, 0],
])

Отже, беремо обернену матрицю:

inverse_matrix = inv(matrix)
print(f"Inverse matrix: "
      f"\n{inverse_matrix}")
raise LinAlgError('Last 2 dimensions of the array must be square')
numpy.linalg.LinAlgError: Last 2 dimensions of the array must be square

Ця помилка якраз означає, що матриця повинна бути квадратною, щоб мати обернену матрицю.

Псевдо-обернена матриця Мура-Пенроуза

У минулій частині я казав, що оберненох матриці не існує для виродженої матриці, але це не означає, що ми не можемо її утворити. Тут на допомогу нам приходить так звана псевдо-матриця Мура-Пенроуза. Вона існує для абсолютно будь-якої матриці і навіть для виродженої.

Для прикладу створимо таку матрицю:

matrix_2 = np.array([
    [1, 1, 1],
    [1, 1, 1],
    [1, 1, 1]
])

Тепер перевіряємо її визначник:

matrix_determinant_2 = det(matrix_2)
print(f"Matrix determinant 2: {matrix_determinant_2}")

Результат:

Matrix determinant 2: 0.0

Ось, визначник нової матриці нульвий, а це означає, що вона вироджена.

Нарешті використовуємо функцію pinv(), щоб знайти псевдо-обернену матрицю Мура-Пенроуза. Виклакаємо функцію і передаємо матрицю:

moore_penrose_matrix = pinv(matrix)
print(f"Moore-Penrose matrix: "
      f"\n{matrix_2}")

Як бачимо, для неї є псевдо-обернена матриця:

Moore-Penrose matrix: 
[[1 1 1]
 [1 1 1]
 [1 1 1]]

Якщо ж ми спробуємо отримати звичайну обернену матрицю через inv(), то отримаємо:

raise LinAlgError("Singular matrix")
numpy.linalg.LinAlgError: Singular matrix

Вона є виродженою, тому для неї не існує оберненої матриці, а тільки псевдо-обернена. Помилка прямо каже про те, що ця матриця вироджена.

Висновок

У ході цієї статті ми познайомилися з поняттями оберненої матриці та псевдо-оберненої матриці. Крім просто теоретичних знань, ми також застосовували функції inv() та pinv() для використання цих математичних сутностей у коді. Також дізналися про вироджену матрицю і спосіб перевірки її виродженості.

Статті про вітчизняний бізнес та цікавих людей:

  • Як побудована програма Meest China Academy

    Курс про товарний бізнес охоплює різні етапи роботи: від пошуку ідеї до перевірки товару, логістики та масштабування. Програма Meest China Academy містить 17 модулів, які послідовно розкривають ці теми без зведення всього навчання до однієї універсальної поради.

    Теми цього довгочиту:

    Meest
  • Які технології використані в Айфон 17

    Айфон 17 поєднує OLED-дисплей із частотою до 120 Гц, чип A19, дві камери Fusion 48 Мп і швидке заряджання через USB-C. У COMFY можна купити Айфон 17 з накопичувачем на 256 або 512 ГБ, вибравши конфігурацію відповідно до обсягу фото, відео та застосунків

    Теми цього довгочиту:

    Iphone 17
  • Як вибрати вживаний iPhone: коротке керівництво для розумної покупки

    Вторинний ринок смартфонів Apple активно зростає, і питання, як вибрати вживаний iPhone, стає актуальним для дедалі більшої кількості користувачів. Правильний підхід дозволяє отримати бу iPhone з актуальною iOS і доброю камерою за помітно нижчу ціну, ніж у нових пристроїв.

    Теми цього довгочиту:

    Iphone
  • Як подолати жіночу безплідність за допомогою донорських яйцеклітин

    Діагноз "безпліддя" рідко звучить як вирок одразу. Для багатьох жінок саме в цей момент вперше звучить словосполучення "донорські яйцеклітини" — і це часто не кінець шляху до материнства, а якраз новий, реальний шанс.

    Теми цього довгочиту:

    Донорство
  • Як заспокоїти зубний біль і чому самолікування може призвести до операції?

    Раптовий біль у зубі може призвести до порушення сну та ускладненого вживання їжі. Люди часто приймають таблетки, роблять полоскання або лікуються народними засобами. В таких випадках не варто відкладати візит до стоматолога, адже можуть з’явитись ускладнення.

    Теми цього довгочиту:

    Стоматологія
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Magnifique numérique
Magnifique numérique@magnifiquedigitalworld

Світ, де код робить чудеса

93Довгочити
1.9KПерегляди
27Підписники
Підтримати
На Друкарні з 14 липня 2025

Більше від автора

  • Метод zfill() у Python

    У цій статті ми розберемо метод zfill() у Python на основі практичних прикладів його використання.

    Теми цього довгочиту:

    It
  • Команда WHERE у SQL

    Сьогодні ми розглянемо команду WHERE та принцип роботи цієї команди.

    Теми цього довгочиту:

    Програмування
  • Робота з омогліфами у Python

    У цій статті ми розберемо бібліотеку confusables та її функціонал. Також ми розглянемо, що таке омогліфи та як їх використовують.

    Теми цього довгочиту:

    Програмування

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: