Matrices dispersas en Python
Cuando casi todas las entradas son cero, guarda solo las que no lo son.
import numpy as np
from scipy import sparse
from scipy.sparse import linalg as splinalg
densa = np.array([[4.0, 0.0, 1.0], [0.0, 3.0, 0.0], [1.0, 0.0, 2.0]])
matriz = sparse.csr_array(densa)
print(matriz.shape, matriz.nnz, f"{matriz.nnz / densa.size:.0%} llena")
print(matriz.toarray()[0])
x = splinalg.spsolve(matriz.tocsc(), np.array([1.0, 2.0, 3.0]))
print(x.round(4), np.allclose(densa @ x, [1, 2, 3]))
identidad = sparse.eye_array(3, format="csr")
print((matriz + identidad).diagonal())
Cómo funciona
csr_arrayes el formato por filas para aritmética y resolución.nnzytoarraycontrastan lo guardado con lo que significa.spsolveresuelve un sistema disperso sin densificarlo.
Palabras clave y builtins usados aquí
asformatprint
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 495
- Tokens
- 170
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 93 segundos.
Paso 1 de 4 en Dispersas y espaciales; paso 19 de 23 en Computación científica con SciPy.