Matriz dispersa

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 13 de diciembre de 2021; las comprobaciones requieren 4 ediciones .

Una matriz dispersa  es una matriz con elementos en su mayoría cero. De lo contrario, si la mayoría de los elementos de la matriz son distintos de cero, la matriz se considera densa .

Entre los expertos, no hay unidad para determinar exactamente cuántos elementos distintos de cero hacen que una matriz sea escasa. Diferentes autores ofrecen diferentes opciones. Para una matriz de orden n, el número de elementos distintos de cero [1] :

Enormes matrices dispersas a menudo surgen cuando se resuelven problemas tales como ecuaciones diferenciales parciales .

Al almacenar y convertir matrices dispersas en una computadora , es útil, ya menudo necesario, utilizar algoritmos especiales y estructuras de datos que tengan en cuenta la estructura de la matriz dispersa. Las operaciones y los algoritmos utilizados para trabajar con matrices densas ordinarias, en relación con matrices dispersas grandes, son relativamente lentos y requieren cantidades significativas de memoria. Sin embargo, las matrices dispersas se pueden comprimir fácilmente escribiendo solo sus elementos distintos de cero, lo que reduce los requisitos de memoria de la computadora .

Presentación

Hay varias formas de almacenar (representar) matrices dispersas, que difieren:


Un diccionario de claves (DOK - Dictionary of Keys) se construye como un diccionario, donde la clave es un par ( fila, columna ), y el valor es el elemento de matriz correspondiente a la fila y la columna.

Una lista de listas (LIL - List of Lists) se construye como una lista de cadenas, donde una cadena es una lista de nodos de la forma ( columna, valor ).

La lista de coordenadas (COO - Coordinate list) es una lista de elementos del formulario (línea, columna, valor).


Almacenamiento de filas comprimidas (CSR: filas dispersas comprimidas, CRS: almacenamiento de filas comprimidas, formato Yale)

Representamos la matriz original que contiene valores distintos de cero como tres matrices:

Ejemplos:

Deja entonces

array_of_values ​​= { 1 , 2 , 4 , 2 , 6 } array of column_indexes = { 0 , 1 , 1 , 1 , 2 } array of_row_indexing = { 0 , 2 , 3 , 5 } -- almacenar 0 primero como elemento de bloqueo

Deja entonces

array_of_values ​​= { 1 , 2 , 3 , 4 , 1 , 11 } array of column_indexes = { 0 , 1 , 3 , 2 , 1 , 3 } array_of_index_rows = { 0 , 3 , 4 , 6 } -- almacenar 0 primero como elemento de bloqueo

Para restaurar la matriz original, debe tomar algún valor en la primera matriz y el índice correspondiente , luego el número de columna , y el número de fila se encuentra como el más pequeño , para lo cual , esto es conveniente, por ejemplo, cuando matriz multiplicación por un vector denso

void smdv ( const crsm * A , double * b , const double * v ) // b += Av { // crsm es una estructura {int n, int m, int nnz, double aval[], double aicol[], double airow[]}; para ( fila int = 0 ; fila < n ; ++ fila ) for ( int i = A -> airow [ fila ]; i < A -> airow [ fila + 1 ]; ++ i ) b [ fila ] += A -> aval [ i ] * v [ A -> aicol [ i ]]; }

Almacenamiento en columna comprimida (CSС - Columna dispersa comprimida, CСS - Almacenamiento en columna comprimida)

Al igual que CRS, solo las filas y las columnas cambian los roles: almacenamos valores por columnas, podemos determinar la fila de la segunda matriz, después de los cálculos con la tercera matriz, reconocemos las columnas.

Bibliotecas de software

Para los cálculos con matrices dispersas se han creado una serie de librerías para varios lenguajes de programación, entre ellas:

Notas

  1. 1 2 Pissanecki, 1988 , Introducción.
  2. SparseLib++ . Fecha de acceso: 1 de agosto de 2012. Archivado desde el original el 21 de septiembre de 2012.
  3. uBLAS/Boost . Consultado el 1 de agosto de 2012. Archivado desde el original el 4 de agosto de 2012.
  4. Alan George, Esmond Ng. Una breve descripción del paquete de ecuaciones lineales dispersas SPARSPAK Waterloo  //  ACM SIGNUM Newsletter, volumen 19, número 4, octubre de 1984. - NY, 1984. - P. 17-20 . — ISBN 978-1-4503-0245-6 . -doi : 10.1145/ 1057931.1057933 .
  5. TA Davis, Direct Methods for Sparse Linear Systems, SIAM, Filadelfia, septiembre de 2006 . Fecha de acceso: 1 de agosto de 2012. Archivado desde el original el 29 de julio de 2012.
  6. Matrices dispersas (scipy.sparse), Guía de referencia de SciPy . Consultado el 22 de abril de 2017. Archivado desde el original el 23 de abril de 2017.
  7. Álgebra lineal dispersa (scipy.sparse.linalg), Guía de referencia de SciPy . Consultado el 22 de abril de 2017. Archivado desde el original el 23 de abril de 2017.

Literatura

  • Reginald P Tewarson. Matrices dispersas. - Prensa Académica, 1973. - 160 p. — ISBN 0126856508 . traducción: Tuarson R. Matrices dispersas = Matrices dispersas. - M. : Mir, 1977. - 191 p.
  • Pissanecki S. Tecnología de matriz dispersa = Tecnología de matriz dispersa. — M .: Mir, 1988. — 410 p. - ISBN 5-03-000960-4 .
  • George A., Liu J. Solución informática de grandes sistemas definidos positivos dispersos. — M .: Mir, 1984. — 333 p.