Друкарня від 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() для використання цих математичних сутностей у коді. Також дізналися про вироджену матрицю і спосіб перевірки її виродженості.

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

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

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

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

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

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

    Навіть ідеальний матрац не компенсує дискомфорт, якщо текстиль підібрано неправильно. Постільна білизна безпосередньо впливає на терморегуляцію, стан шкіри та глибину сну. Більшість проблем виникає не через низьку якість виробів, а через вибір матеріалів та подальшу експлуатацію

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

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

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

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

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

    Читання
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Mystique Lord
Mystique Lord@nocturnal_reader

Нічний читач

327Прочитань
19Автори
9Читачі
На Друкарні з 14 липня

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

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

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

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

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