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ștenp.linalg.inv(A). - Verifici
A @ inv(A) == np.eye(n)și primeștiFalsedin cauza erorilor de rotunjire. Foloseștenp.allclose(). - Rezolvi un sistem cu
np.linalg.inv(A) @ b. Merge, darnp.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.