Articulo de referencia

Matriz dispersa

Matriz dispersa obtenida al resolver un problema de elementos finitos en dos dimensiones. Los elementos distintos de cero se muestran en negro. En análisis numérico y computació...

Matriz dispersa obtenida al resolver un problema de elementos finitos en dos dimensiones. Los elementos distintos de cero se muestran en negro.

En análisis numérico y computación científica , una matriz dispersa o arreglo disperso es una matriz en la que la mayoría de los elementos son cero. [ 1 ] No existe una definición estricta sobre la proporción de elementos con valor cero para que una matriz se considere dispersa , pero un criterio común es que el número de elementos distintos de cero sea aproximadamente igual al número de filas o columnas. Por el contrario, si la mayoría de los elementos son distintos de cero, la matriz se considera densa . [ 1 ] El número de elementos con valor cero dividido por el número total de elementos (por ejemplo, m × n para una matriz m × n ) se denomina a veces dispersión de la matriz.

Conceptualmente, la escasez corresponde a sistemas con pocas interacciones por pares. Por ejemplo, consideremos una fila de bolas conectadas por resortes: este es un sistema disperso, ya que solo las bolas adyacentes están acopladas. Por el contrario, si la misma fila de bolas tuviera resortes que conectaran cada bola con todas las demás, el sistema correspondería a una matriz densa. El concepto de escasez es útil en combinatoria y áreas de aplicación como la teoría de redes y el análisis numérico , que suelen tener una baja densidad de datos o conexiones significativas. Las matrices dispersas de gran tamaño aparecen con frecuencia en aplicaciones científicas o de ingeniería al resolver ecuaciones diferenciales parciales .

Al almacenar y manipular matrices dispersas en una computadora , es beneficioso y a menudo necesario utilizar algoritmos y estructuras de datos especializados que aprovechen la estructura dispersa de la matriz. Se han creado computadoras especializadas para matrices dispersas, [ 2 ] ya que son comunes en el campo del aprendizaje automático. [ 3 ] Las operaciones que utilizan estructuras y algoritmos estándar de matrices densas son lentas e ineficientes cuando se aplican a matrices dispersas grandes, ya que se desperdician procesamiento y memoria en los ceros. Los datos dispersos son, por naturaleza, más fáciles de comprimir y, por lo tanto, requieren significativamente menos almacenamiento . Algunas matrices dispersas muy grandes son inviables de manipular utilizando algoritmos estándar de matrices densas.

Casos especiales

Bandado

Las matrices de banda constituyen una clase especial de matrices dispersas donde los elementos distintos de cero se concentran cerca de la diagonal principal. Una matriz de banda se caracteriza por sus anchos de banda inferior y superior, que se refieren al número de diagonales por debajo y por encima (respectivamente) de la diagonal principal entre las que se encuentran todos los elementos distintos de cero.

Formalmente, el ancho de banda inferior de una matriz A es el número más pequeño p tal que la entrada a i , j se anula siempre que i > j + p . De manera similar, el ancho de banda superior es el número más pequeño p tal que a i , j = 0 siempre que i < jp ( Golub & Van Loan 1996 , §1.2.1) . Por ejemplo, una matriz tridiagonal tiene un ancho de banda inferior de 1 y un ancho de banda superior de 1 . Como otro ejemplo, la siguiente matriz dispersa tiene un ancho de banda inferior y superior iguales a 3. Nótese que los ceros se representan con puntos para mayor claridad. [incógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnitaincógnita]{\displaystyle {\begin{bmatrix}X&X&X&\cdot &\cdot &\cdot &\cdot &\\X&X&\cdot &X&X&\cdot &\cdot &\\X&\cdot &X&\cdot &X&\cdot &\cdot &\\\cdot &X&\cdot &X&\cdot &X&\cdot &\\\cdot &X&X&\cdot &X&X&X&\\\cdot &\cdot &\cdot &X&X&X&\cdot &\\\cdot &\cdot &\cdot &\cdot &X&\cdot &X&\\\end{bmatrix}}}

Las matrices con un ancho de banda superior e inferior razonablemente pequeño se conocen como matrices de banda y a menudo se prestan a algoritmos más sencillos que las matrices dispersas generales; o bien, en ocasiones se pueden aplicar algoritmos de matrices densas y ganar eficiencia simplemente recorriendo un número reducido de índices.

Al reorganizar las filas y columnas de una matriz A, es posible obtener una matriz A con un ancho de banda menor. Existen varios algoritmos diseñados para minimizar el ancho de banda .

Diagonal

Una matriz diagonal es el caso extremo de una matriz de banda, con ancho de banda superior e inferior cero. Una matriz diagonal se puede almacenar de forma eficiente guardando solo los elementos de la diagonal principal como una matriz unidimensional , por lo que una matriz diagonal n × n requiere solo n elementos en la memoria.

Simétrico

Una matriz dispersa simétrica surge como la matriz de adyacencia de un grafo no dirigido ; se puede almacenar de manera eficiente como una lista de adyacencia .

Bloque diagonal

Una matriz diagonal por bloques consta de submatrices a lo largo de sus bloques diagonales. Una matriz diagonal por bloques A tiene la forma A=[A1000A2000Anorte],{\displaystyle \mathbf {A} ={\begin{bmatrix}\mathbf {A} _{1}&0&\cdots &0\\0&\mathbf {A} _{2}&\cdots &0\\\vdots &\vdots &\ddots &\vdots \\0&0&\cdots &\mathbf {A} _{n}\end{bmatrix}},}

donde A k es una matriz cuadrada para todo k = 1, ..., n .

Usar

Reducción del relleno

Los elementos que cambian de valor durante la ejecución de un algoritmo son aquellos que pasan de un valor inicial cero a un valor distinto de cero. Para reducir los requisitos de memoria y el número de operaciones aritméticas, resulta útil minimizar estos elementos intercambiando filas y columnas de la matriz. La descomposición simbólica de Cholesky permite calcular el peor resultado posible antes de realizar la descomposición de Cholesky propiamente dicha .

Existen otros métodos además de la descomposición de Cholesky . Los métodos de ortogonalización (como la factorización QR) son comunes, por ejemplo, al resolver problemas mediante el método de mínimos cuadrados. Si bien el relleno teórico sigue siendo el mismo, en la práctica los "falsos no ceros" pueden variar según el método. Además, las versiones simbólicas de estos algoritmos pueden utilizarse de la misma manera que la descomposición de Cholesky simbólica para calcular el relleno en el peor de los casos.

Resolución de ecuaciones de matrices dispersas

Para la resolución de matrices dispersas existen métodos tanto iterativos como directos.

Los métodos iterativos, como el método del gradiente conjugado y GMRES, utilizan cálculos rápidos de productos matriz-vector.Aincógnitai{\displaystyle Ax_{i}}donde matrizA{\displaystyle A}es escaso. El uso de precondicionadores puede acelerar significativamente la convergencia de dichos métodos iterativos.

Almacenamiento

Una matriz se almacena típicamente como una matriz bidimensional. Cada entrada de la matriz representa un elemento a i , j de la matriz y se accede a él mediante los índices i y j . Por convención, i es el índice de fila, numerado de arriba abajo, y j es el índice de columna, numerado de izquierda a derecha. Para una matriz m × n , la cantidad de memoria necesaria para almacenarla en este formato es proporcional a m × n (sin tener en cuenta que también es necesario almacenar las dimensiones de la matriz).

En el caso de una matriz dispersa, se pueden lograr reducciones sustanciales en los requisitos de memoria almacenando solo los elementos distintos de cero. Dependiendo del número y la distribución de estos elementos, se pueden utilizar diferentes estructuras de datos, lo que permite un gran ahorro de memoria en comparación con el método básico. La desventaja es que el acceso a los elementos individuales se vuelve más complejo y se necesitan estructuras adicionales para poder recuperar la matriz original de forma inequívoca.

Los formatos se pueden dividir en dos grupos:

  • Aquellos que permiten una modificación eficiente, como DOK (Diccionario de claves), LIL (Lista de listas) o COO (Lista de coordenadas). Estos se utilizan normalmente para construir las matrices.
  • Aquellas que admiten operaciones de acceso y de matriz eficientes, como CSR (Fila Dispersa Comprimida) o CSC (Columna Dispersa Comprimida).

Diccionario de claves (DOK)

DOK consiste en un diccionario que asigna pares ( fila, columna) al valor de los elementos. Los elementos que no están en el diccionario se consideran cero. El formato es adecuado para construir incrementalmente una matriz dispersa en orden aleatorio, pero no es eficiente para iterar sobre valores distintos de cero en orden lexicográfico. Normalmente, se construye una matriz en este formato y luego se convierte a otro formato más eficiente para su procesamiento. [ 4 ]

Lista de listas (LIL)

LIL almacena una lista por fila, donde cada entrada contiene el índice de columna y el valor. Normalmente, estas entradas se mantienen ordenadas por índice de columna para una búsqueda más rápida. Este es otro formato adecuado para la construcción incremental de matrices. [ 5 ]

Lista de coordenadas (COO)

COO almacena una lista de tuplas (fila, columna, valor) . Idealmente, las entradas se ordenan primero por índice de fila y luego por índice de columna para mejorar los tiempos de acceso aleatorio. Este es otro formato adecuado para la construcción incremental de matrices. [ 6 ]

Fila dispersa comprimida (formato CSR, CRS o Yale)

El formato de fila dispersa comprimida (CSR), almacenamiento de fila comprimida (CRS) o formato Yale representa una matriz M mediante tres matrices (unidimensionales) que contienen, respectivamente, valores distintos de cero, la extensión de las filas y los índices de las columnas. Es similar al formato COO, pero comprime los índices de fila, de ahí su nombre. Este formato permite un acceso rápido a las filas y multiplicaciones matriz-vector ( M x ). El formato CSR se utiliza al menos desde mediados de la década de 1960, y la primera descripción completa apareció en 1967. [ 7 ]

El formato CSR almacena una matriz dispersa m × n , M, en forma de filas utilizando tres arreglos (unidimensionales) (V, COL_INDEX, ROW_INDEX) . Sea NNZ el número de entradas no nulas en M. (Tenga en cuenta que aquí se utilizarán índices basados ​​en cero ).

  • Los arreglos V y COL_INDEX tienen una longitud de NNZ y contienen los valores distintos de cero y los índices de columna de esos valores, respectivamente.
  • COL_INDEX contiene la columna en la que se encuentra la entrada V correspondiente.
  • El array ROW_INDEX tiene una longitud de m + 1 y codifica el índice en V y COL_INDEX donde comienza la fila dada. Esto es equivalente a ROW_INDEX[j] codificando el número total de elementos distintos de cero por encima de la fila j . El último elemento es NNZ , es decir, el índice ficticio en V inmediatamente después del último índice válido NNZ − 1. [ 8 ]

Por ejemplo, la matriz (5000080000300600){\displaystyle {\begin{pmatrix}5&0&0&0\\0&8&0&0\\0&0&3&0\\0&6&0&0\\\end{pmatrix}}} es una matriz de 4 × 4 con 4 elementos distintos de cero, por lo tanto

V = [ 5 8 3 6 ] COL_INDEX = [ 0 1 2 1 ] ÍNDICE_DE_FILA = [ 0 1 2 3 4 ]

suponiendo que se trata de un lenguaje con índice cero.

Para extraer una fila, primero definimos:

inicio_fila = ÍNDICE_FILA[fila] fin_fila = ÍNDICE_FILA[fila + 1]

Luego tomamos segmentos de V y COL_INDEX comenzando en row_start y terminando en row_end.

Para extraer la fila 1 (la segunda fila) de esta matriz, establecemos row_start=1y row_end=2. Luego hacemos las secciones V[1:2] = [8]y COL_INDEX[1:2] = [1]. Ahora sabemos que en la fila 1 tenemos un elemento en la columna 1 con valor 8.

En este caso, la representación CSR contiene 13 entradas, en comparación con las 16 de la matriz original. El formato CSR ahorra memoria solo cuando NNZ < ( m ( n − 1) − 1) / 2 .

Otro ejemplo, la matriz (10200000030040000050607000000080){\displaystyle {\begin{pmatrix}10&20&0&0&0&0\\0&30&0&40&0&0\\0&0&50&60&70&0\\0&0&0&0&0&80\\\end{pmatrix}}} es una matriz de 4 × 6 (24 entradas) con 8 elementos distintos de cero, por lo que

V = [10 20 30 40 50 60 70 80] COL_INDEX = [ 0 1 1 3 2 3 4 5 ] ÍNDICE_DE_FILA = [ 0 2 4 7 8 ]

El conjunto se almacena como 21 entradas: 8 en V , 8 en COL_INDEX y 5 en ROW_INDEX .

  • ROW_INDEX divide la matriz V en filas: (10, 20) (30, 40) (50, 60, 70) (80), indicando el índice de V (y COL_INDEX ) donde comienza y termina cada fila;
  • COL_INDEX alinea los valores en las columnas: (10, 20, ...) (0, 30, 0, 40, ...)(0, 0, 50, 60, 70, 0) (0, 0, 0, 0, 0, 80).

Nótese que en este formato, el primer valor de ROW_INDEX siempre es cero y el último siempre es NNZ , por lo que resultan redundantes en cierto modo (aunque en lenguajes de programación donde la longitud de la matriz debe almacenarse explícitamente, NNZ no sería redundante). No obstante, esto evita la necesidad de gestionar un caso excepcional al calcular la longitud de cada fila, ya que garantiza que la fórmula ROW_INDEX[ i + 1] − ROW_INDEX[ i ] funcione para cualquier fila i . Además, el coste de memoria de este almacenamiento redundante probablemente sea insignificante para una matriz suficientemente grande.

Los formatos de matriz dispersa de Yale (antiguo y nuevo) son instancias del esquema CSR. El formato antiguo de Yale funciona exactamente como se describió anteriormente, con tres matrices; el nuevo formato combina ROW_INDEX y COL_INDEX en una sola matriz y maneja la diagonal de la matriz por separado. [ 9 ]

En el caso de las matrices de adyacencia lógicas , se puede omitir la matriz de datos, ya que la existencia de una entrada en la matriz de filas es suficiente para modelar una relación de adyacencia binaria.

Es probable que se le conozca como formato Yale porque fue propuesto en el informe de 1977 del paquete de matrices dispersas de Yale del Departamento de Ciencias de la Computación de la Universidad de Yale. [ 10 ]

Columna dispersa comprimida (CSC o CCS)

CSC es similar a CSR excepto que los valores se leen primero por columna, se almacena un índice de fila para cada valor y se almacenan punteros de columna. Por ejemplo, CSC es (val, row_ind, col_ptr) , donde val es un arreglo de los valores no nulos de la matriz (de arriba a abajo y luego de izquierda a derecha); row_ind son los índices de fila correspondientes a los valores; y col_ptr es la lista de índices de val donde comienza cada columna. El nombre se basa en el hecho de que la información del índice de columna está comprimida en relación con el formato COO. Normalmente se utiliza otro formato (LIL, DOK, COO) para la construcción. Este formato es eficiente para operaciones aritméticas, segmentación de columnas y productos matriz-vector. Este es el formato tradicional para especificar una matriz dispersa en MATLAB (a través de la sparsefunción).

Software

Muchas bibliotecas de software admiten matrices dispersas y proporcionan solucionadores para ecuaciones de matrices dispersas. Las siguientes son de código abierto:

  • PETSc , una extensa biblioteca en C, contiene numerosos solucionadores de matrices para diversos formatos de almacenamiento de matrices.
  • Trilinos , una extensa biblioteca de C++, con subbibliotecas dedicadas al almacenamiento de matrices densas y dispersas y a la solución de los sistemas lineales correspondientes.
  • Eigen3 es una biblioteca de C++ que contiene varios solucionadores de matrices dispersas. Sin embargo, ninguno de ellos está paralelizado .
  • MUMPS ( MU ltifrontal Massively Parallel sparse direct Solver ), escrito en Fortran90, es un solucionador frontal .
  • deal.II , una biblioteca de elementos finitos que también cuenta con una subbiblioteca para sistemas lineales dispersos y su solución.
  • DUNE , otra biblioteca de elementos finitos que también cuenta con una subbiblioteca para sistemas lineales dispersos y su solución.
  • Armadillo proporciona una interfaz C++ fácil de usar para BLAS y LAPACK.
  • SciPy ofrece soporte para varios formatos de matrices dispersas, álgebra lineal y solucionadores.
  • ALGLIB es una biblioteca de C++ y C# con soporte para álgebra lineal dispersa.
  • ARPACK es una librería Fortran 77 para la diagonalización y manipulación de matrices dispersas, utilizando el algoritmo de Arnoldi.
  • Biblioteca SLEPc para la solución de sistemas lineales a gran escala y matrices dispersas.
  • scikit-learn , una biblioteca de Python para aprendizaje automático , proporciona soporte para matrices dispersas y solucionadores.
  • SparseArrays es una biblioteca estándar de Julia .
  • PSBLAS , un conjunto de herramientas de software para resolver sistemas lineales dispersos que admite múltiples formatos también en GPU.

Historia

El término matriz dispersa posiblemente fue acuñado por Harry Markowitz, quien inició algunos trabajos pioneros pero luego abandonó el campo. [ 11 ]

Véase también

Notas

  1. 1 2 Yan, Di; Wu, Tao; Liu, Ying; Gao, Yang (2017). "Una multiplicación eficiente de matrices escasamente densas en un sistema multinúcleo". 2017 IEEE 17ª Conferencia Internacional sobre Tecnologías de la Comunicación (ICCT) . IEEE. págs. 1880– 3. doi : 10.1109/icct.2017.8359956 . ISBN  978-1-5090-3944-9El núcleo computacional de las redes neuronales profundas (DNN) es la multiplicación de matrices grandes, tanto dispersas como densas. En el campo del análisis numérico, una matriz dispersa es aquella cuyos elementos de la tabla son principalmente ceros. Por el contrario , si el número de elementos distintos de cero en una matriz es relativamente grande, se la suele considerar una matriz densa. La proporción de elementos cero (o distintos de cero) en una matriz se denomina dispersión (o densidad). Las operaciones que utilizan estructuras y algoritmos estándar para matrices densas son relativamente lentas y consumen grandes cantidades de memoria cuando se aplican a matrices dispersas de gran tamaño.
  2. "Cerebras Systems presenta el primer chip de un billón de transistores de la industria" . www.businesswire.com . 19 de agosto de 2019. Consultado el 2 de diciembre de 2019. El WSE contiene 400 000 núcleos de computación optimizados para IA. Denominados SLAC™ (por Sparse Linear Algebra Cores), estos núcleos son flexibles, programables y están optimizados para el álgebra lineal dispersa que sustenta todos los cálculos de redes neuronales.
  3. "El Laboratorio Nacional Argonne despliega Cerebras CS-1, la computadora de inteligencia artificial más rápida del mundo | Laboratorio Nacional Argonne" . www.anl.gov (Comunicado de prensa) . Consultado el 2 de diciembre de 2019. El WSE es el chip más grande jamás fabricado, con 46.225 milímetros cuadrados de área, 56,7 veces más grande que la unidad de procesamiento gráfico más grande. Contiene 78 veces más núcleos de cómputo optimizados para IA, 3.000 veces más memoria en chip de alta velocidad, 10.000 veces más ancho de banda de memoria y 33.000 veces más ancho de banda de comunicación.
  4. Verscipy.sparse.dok_matrix
  5. Verscipy.sparse.lil_matrix
  6. Verscipy.sparse.coo_matrix
  7. Buluç, Aydın; Fineman, Jeremy T.; Frigo, Matteo; Gilbert, John R.; Leiserson, Charles E. (2009). Multiplicación paralela de matriz dispersa por vector y matriz transpuesta por vector usando bloques dispersos comprimidos (PDF) . Simposio de la ACM sobre paralelismo en algoritmos y arquitecturas. CiteSeerX 10.1.1.211.5256 . 
  8. Saad 2003
  9. Bank, Randolph E.; Douglas, Craig C. (1993), "Paquete de multiplicación de matrices dispersas (SMMP)" (PDF) , Advances in Computational Mathematics , 1 : 127–137 , doi : 10.1007/BF02070824 , S2CID 6412241 
  10. Eisenstat, SC; Gursky, MC; Schultz, MH; Sherman, AH (abril de 1977). "Paquete de matrices dispersas de Yale" (PDF) . Archivado (PDF) del original el 6 de abril de 2019. Recuperado el 6 de abril de 2019 .
  11. Entrevista de historia oral con Harry M. Markowitz , págs. 9, 10.

Referencias

  • Golub, Gene H .; Van Loan, Charles F. (1996). Cálculos matriciales (3.ª  ed.). Baltimore: Johns Hopkins. ISBN 978-0-8018-5414-9.
  • Stoer, Josef; Bulirsch, Roland (2002). Introducción al análisis numérico (3.ª  ed.). Springer. doi : 10.1007/978-0-387-21738-3 . ISBN 978-0-387-95452-3.
  • Tewarson, Reginald P. (1973). Matrices dispersas . Matemáticas en ciencia e ingeniería. Vol.  99. Academic Press. ISBN 0-12-685650-8OCLC 316552948 (Este libro, escrito por un profesor de la Universidad Estatal de Nueva York en Stony Brook, fue el primero dedicado exclusivamente a las matrices dispersas. En esa universidad se ofrecieron cursos de posgrado que lo utilizaban como libro de texto a principios de la década de 1980).
  • Bank, Randolph E.; Douglas, Craig C. "Paquete de multiplicación de matrices dispersas" (PDF) .
  • Pissanetzky, Sergio (1984). Tecnología de matrices dispersas . Academic Press. ISBN 978-0-12-557580-5OCLC 680489638 
  • Snay, Richard A. (1976). "Reducción del perfil de matrices simétricas dispersas". Bulletin Géodésique . 50 (4): 341– 352. Bibcode : 1976BGeod..50..341S . doi : 10.1007/BF02521587 . hdl : 2027/uc1.31210024848523 . S2CID 123079384 . También NOAA Technical Memorandum NOS NGS-4, National Geodetic Survey, Rockville, MD. Referenciando Saad 2003 .
  • Scott, Jennifer; Tuma, Miroslav (2023). Algoritmos para sistemas lineales dispersos . Serie del Centro Nečas. Birkhauser. doi : 10.1007/978-3-031-25820-6 . ISBN 978-3-031-25819-0.(Acceso abierto)

Lecturas adicionales

  • Gibbs, Norman E.; Poole, William G.; Stockmeyer, Paul K. (1976). "Una comparación de varios algoritmos de reducción de ancho de banda y perfil" . ACM Transactions on Mathematical Software . 2 (4): 322– 330. doi : 10.1145/355705.355707 . S2CID 14494429 . 
  • Gilbert, John R.; Moler, Cleve; Schreiber, Robert (1992). "Matrices dispersas en MATLAB: diseño e implementación" . SIAM Journal on Matrix Analysis and Applications . 13 (1): 333– 356. CiteSeerX 10.1.1.470.1054 . doi : 10.1137/0613024 . 
  • Investigación sobre algoritmos de matrices dispersas en la Universidad de Texas A&M.
  • Colección de matrices dispersas de Suite
  • Proyecto SMALL: Un proyecto financiado por la UE sobre modelos dispersos, algoritmos y aprendizaje de diccionarios para datos a gran escala.
  • Hackbusch, Wolfgang (2016). Solución iterativa de grandes sistemas dispersos de ecuaciones . Ciencias Matemáticas Aplicadas. Vol.  95 (2.ª  ed.). Springer. doi : 10.1007/978-3-319-28483-5 . ISBN 978-3-319-28481-1.
  • Saad, Yousef (2003). Métodos iterativos para sistemas lineales dispersos . SIAM. doi : 10.1137/1.9780898718003 . ISBN 978-0-89871-534-7OCLC 693784152 
  • Davis, Timothy A. (2006). Métodos directos para sistemas lineales dispersos . SIAM. doi : 10.1137/1.9780898718881 . ISBN 978-0-89871-613-9OCLC 694087302