np.linalg.inv() în NumPy

Algebră liniară NumPy 1.0+

Calculează inversa unei matrice pătrate; pentru o matrice singulară aruncă LinAlgError.

Sintaxă
np.linalg.inv(a)

Ce face np.linalg.inv()

np.linalg.inv(A) returnează matricea B pentru care A @ B este matricea identitate (1 pe diagonală, 0 în rest). Matricea trebuie să fie pătrată (același număr de rânduri și coloane).

Nu orice matrice are inversă. Dacă determinantul este 0 (de exemplu un rând este multiplul altuia), matricea este singulară și inv aruncă np.linalg.LinAlgError: Singular matrix, pe care o poți prinde cu try/except.

Calculul se face cu numere cu virgulă, deci A @ inv(A) poate avea erori foarte mici (de exemplu 2.2e-16 în loc de 0). Verifică rezultatul cu np.allclose(), nu cu ==. Pentru rezolvarea unui sistem de ecuații, np.linalg.solve() este mai precisă decât inv(A) @ b.

Parametri

Parametru Descriere
a O matrice pătrată (sau un set de matrice pătrate, în ultimele două axe).

Ce returnează

Inversa, ca tablou float de aceeași formă. Aruncă LinAlgError dacă matricea este singulară.

Exemple

Exemplul 1: Inversa și verificarea ei

import numpy as np

A = np.array([[4.0, 7.0], [2.0, 6.0]])
B = np.linalg.inv(A)
print(B)
print(np.allclose(A @ B, np.eye(2)))

Rezultat

[[ 0.6 -0.7]
 [-0.2  0.4]]
True

Exemplul 2: Matrice singulară

Al doilea rând este dublul primului, deci matricea nu are inversă.

import numpy as np

A = np.array([[1.0, 2.0], [2.0, 4.0]])
try:
    np.linalg.inv(A)
except np.linalg.LinAlgError as e:
    print("Nu există inversă:", e)

Rezultat

Nu există inversă: Singular matrix

Exemplul 3: Erori mici de rotunjire

Produsul nu este exact matricea identitate, dar este foarte aproape. -0. din rezultatul rotunjit vine dintr-o valoare negativă foarte mică.

import numpy as np

A = np.array([[2.0, 1.0, 1.0], [1.0, 3.0, 2.0], [1.0, 0.0, 0.0]])
I = A @ np.linalg.inv(A)
print(np.array_equal(I, np.eye(3)))
print(np.allclose(I, np.eye(3)))
print(I.round(10))

Rezultat

False
True
[[ 1.  0.  0.]
 [-0.  1.  0.]
 [ 0.  0.  1.]]

Greșeli frecvente

  • Calculezi inversa ca 1 / A: asta împarte fiecare element, nu inversează matricea. Folosește np.linalg.inv(A).
  • Verifici A @ inv(A) == np.eye(n) și primești False din cauza erorilor de rotunjire. Folosește np.allclose().
  • Rezolvi un sistem cu np.linalg.inv(A) @ b. Merge, dar np.linalg.solve(A, b) face mai puține calcule și dă erori de rotunjire mai mici.

Comenzi înrudite

  • np.linalg.det(): Calculează determinantul unei matrice pătrate; rezultatul este float aproximativ, compară-l cu np.isclose sau rotunjește-l.
  • np.linalg.solve(): Rezolvă un sistem de ecuații liniare A @ x = b și returnează soluția x; verifici rezultatul cu np.allclose.
  • np.matmul() și operatorul @: Înmulțirea de matrice cu np.matmul sau operatorul @; diferența față de *, care înmulțește element cu element.