Àlgebra lineal
Aquesta llicó cobreix les operacions bàsiques d'àlgebra lineal utilitzant NumPy.
Producte matricial
El producte matricial és una de les operacions fonamentals. En NumPy, hi ha dues maneres d'efectuar-lo:
La funció
numpy.dot()(o el mètode.dot()d'un array). Tot i que pot fer productes escalars i productes de matriu per vector, el seu ús principal per al producte matricial s'ha vist reemplaçat.L'operador
@és la forma preferida i més clara d'indicar el producte matricial.
Exemple:
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# Usant l'operador @ (Recomanat)
C_at = A @ B
print("A @ B:\n", C_at)
# Usant np.dot()
C_dot = np.dot(A, B)
print("np.dot(A, B):\n", C_dot)Nota: Per al producte element a element, cal utilitzar l'operador de multiplicació estàndard *.
Determinant i rang de matrius
Aquestes operacions es realitzen utilitzant funcions del submòdul numpy.linalg.
El determinant d'una matriu quadrada es calcula amb numpy.linalg.det().
A = np.array([[4, 6], [3, 8]])
det_A = np.linalg.det(A)
print("Determinant de A:", det_A) # 4*8 - 6*3 = 32 - 18 = 14El rang d'una matriu és la dimensió de l'espai columna (o l'espai fila), que és igual al nombre de valors singulars diferents de zero. Es calcula amb numpy.linalg.matrix_rank().
B = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
rang_B = np.linalg.matrix_rank(B)
print("Rang de B:", rang_B) # Aquesta matriu és singular (rang 2)Inversa de matrius
La inversa d'una matriu quadrada es calcula amb numpy.linalg.inv(). Si la matriu és singular (determinant zero), la funció llançarà una excepció LinAlgError.
A = np.array([[1, 2], [3, 4]])
A_inversa = np.linalg.inv(A)
print("Inversa de A:\n", A_inversa)
# Comprovació: A @ A_inversa ha de ser la matriu identitat
identitat = A @ A_inversa
print("A @ A_inversa:\n", identitat)Valors i vectors propis
La funció numpy.linalg.eig() retorna una tupla amb:
- Un array dels valors propis.
- Una matriu on les columnes són els vectors propis corresponents.
M = np.array([[2, -1], [4, -3]])
valors_propis, vectors_propis = np.linalg.eig(M)
print("Valors propis:", valors_propis)
print("Vectors propis (columnes):\n", vectors_propis)Descomposicions: SVD, QR, LU
NumPy suporta diverses descomposicions matricials fonamentals en anàlisi numèrica:
- SVD (Descomposició en Valors Singulars): Es calcula amb
numpy.linalg.svd(). Descompon una matriuen . És una eina essencial en la compressió de dades i l'estadística. - QR: Es calcula amb
numpy.linalg.qr(). Descompon una matriuen un producte d'una matriu ortogonal i una matriu triangular superior . - LU (o Descomposició de Cholesky per a matrius definides positives): La descomposició LU es fa amb
scipy.linalg.lu(requereix SciPy), però NumPy ténumpy.linalg.cholesky()per a matrius simètriques i definides positives, descomponent.
Exemple (SVD):
A = np.array([[1, 1], [0, 1], [1, 0]])
U, S, Vh = np.linalg.svd(A)
print("Matriu U:\n", U)
print("Valors singulars (S):\n", S)
print("Matriu Vh (V transposada conjugada):\n", Vh)Resolució de sistemes d'equacions lineals
Per resoldre un sistema d'equacions lineals de la forma numpy.linalg.solve().
Aquesta funció és generalment més eficient i numèricament estable que calcular l'inversa (
Per exemple, considerem el següent sistema d'equacions:
Aquest problema es pot resoldre amb NumPy de la manera següent:
# Matriu de coeficients (A)
A = np.array([[2, 3], [1, -2]])
# Vector de termes independents (b)
b = np.array([8, -3])
# Resoldre A x = b
x = np.linalg.solve(A, b)
print("La solució (x, y) és:", x)
# La solució és (1.0, 2.0)
Jordi Petit
Lliçons.jutge.org
© Universitat Politècnica de Catalunya, 2025
