typestar

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

  1. csr_array es el formato por filas para aritmética y resolución.
  2. nnz y toarray contrastan lo guardado con lo que significa.
  3. spsolve resuelve un sistema disperso sin densificarlo.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 4 en Dispersas y espaciales; paso 19 de 23 en Computación científica con SciPy.

← Anterior Siguiente →