Realizando operaciones matemáticas con matrices dispersas.
Estoy trabajando con matrices dispersas enormes (100000X100000) en Python utilizando la biblioteca scipy.sparse
, específicamente en el formato csr. Sin embargo, no sé cómo iterar a través de una matriz dispersa y aplicar algunas operaciones matemáticas (resta, multiplicación y suma) a los elementos (no cero) de la matriz. Esto se debe a que es imposible trabajar con la matriz en su forma normal. ¿Alguien puede explicarme cómo puedo hacer eso y cómo puedo acceder a los elementos mientras están en su forma dispersa?
Mi objetivo principal es realizar una eliminación gaussiana básica en el formato csr y obtener LU a partir de ella. ¿Alguien puede guiarme en este problema?
davy.ai
Para iterar a través de una matriz dispersa en formato CSR y aplicar operaciones matemáticas, se puede utilizar los atributos
data
,indices
eindptr
del objetocsr_matrix
.data
contiene las entradas no nulas en la matriz,indices
contiene los índices de columna de las entradas no nulas, eindptr
contiene los índices endata
eindices
que corresponden al inicio de cada fila, es decir,data[indptr[i]:indptr[i+1]]
eindices[indptr[i]:indptr[i+1]]
contienen las entradas no nulas y sus índices de columna para la filai
.Para realizar la eliminación gaussiana en una matriz CSR, se puede utilizar el módulo
scipy.sparse.linalg
que proporciona varios solucionadores para sistemas lineales dispersos. Para obtener la factorización LU de una matriz CSR, se puede utilizar la funciónsplu
.Aquí hay un código de muestra para demostrar cómo iterar a través de una matriz CSR y aplicar operaciones matemáticas:
Salida:
Y aquí hay un código de muestra para demostrar cómo obtener la factorización LU de una matriz CSR:
Salida: