Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Construcción de matrices dispersas

Creación de matrices dispersas

nunca creaMATLAB® matrices dispersas automáticamente. En su lugar, debe determinar si una matriz contiene un porcentaje suficientemente grande de ceros para beneficiarse de técnicas dispersas.

El de una matriz es el número de elementos distintos de cero dividido por el número total de elementos de matriz.density Para la matriz, esto sería oM

nnz(M) / prod(size(M));
nnz(M) / numel(M);

Las matrices con muy baja densidad son a menudo buenos candidatos para el uso del formato disperso.

Conversión de completo a disperso

Puede convertir una matriz completa en almacenamiento disperso utilizando la función con un único argumento.sparse

Por ejemplo:

A = [ 0   0   0   5       0   2   0   0       1   3   0   0       0   0   4   0]; S = sparse(A)
 S =          (3,1)        1    (2,2)        2    (3,2)        3    (4,3)        4    (1,4)        5

La salida impresa enumera los elementos distintos de cero de, junto con sus índices de fila y columna.S Los elementos se ordenan por columnas, reflejando la estructura de datos interna.

Puede convertir una matriz dispersa en almacenamiento completo utilizando la función, siempre que el orden de la matriz no sea demasiado grande.full Por ejemplo, invierte la conversión de ejemplo.A = full(S)

Convertir una matriz completa en almacenamiento disperso no es la forma más frecuente de generar matrices dispersas. Si el orden de una matriz es lo suficientemente pequeño como para que el almacenamiento completo sea posible, la conversión a almacenamiento disperso raramente ofrece ahorros significativos.

Creación de matrices dispersas directamente

Puede crear una matriz dispersa a partir de una lista de elementos distintos de cero mediante la función con cinco argumentos.sparse

S = sparse(i,j,s,m,n)

y son vectores de índices de fila y columna, respectivamente, para los elementos distintos de cero de la matriz. es un vector de valores distintos de cero cuyos índices se especifican por los pares correspondientes. es la dimensión de fila de la matriz resultante y es la dimensión de la columna.ijs(i,j)mn

La matriz del ejemplo anterior se puede generar directamente conS

S = sparse([3 2 3 4 1],[1 2 2 3 4],[1 2 3 4 5],4,4)
S =     (3,1)        1    (2,2)        2    (3,2)        3    (4,3)        4    (1,4)        5

El comando tiene un número de formas alternativas.sparse El ejemplo anterior usa un formulario que establece el número máximo de elementos distintos de cero en la matriz.length(s) Si lo desea, puede anexar un sexto argumento que especifique un máximo mayor, lo que le permite agregar elementos distintos de cero más adelante sin reasignar la matriz dispersa.

La representación matricial del segundo operador de diferencia es un buen ejemplo de una matriz dispersa. Es una matriz tridiagonales con-2S en la diagonal y 1s en la Super-y subdiagonal. Hay muchas maneras de generarlo, aquí hay una posibilidad.

n = 5; D = sparse(1:n,1:n,-2*ones(1,n),n,n); E = sparse(2:n,1:n-1,ones(1,n-1),n,n); S = E+D+E'
S =     (1,1)       -2    (2,1)        1    (1,2)        1    (2,2)       -2    (3,2)        1    (2,3)        1    (3,3)       -2    (4,3)        1    (3,4)        1    (4,4)       -2    (5,4)        1    (4,5)        1    (5,5)       -2

Ahora muestra la matriz completa correspondiente.F = full(S)

F = full(S)
F =      -2     1     0     0     0      1    -2     1     0     0      0     1    -2     1     0      0     0     1    -2     1      0     0     0     1    -2

Creación de matrices dispersas a partir de sus elementos diagonales

La creación de matrices dispersas basadas en sus elementos diagonales es una operación común, por lo que la función controla esta tarea.spdiags Su sintaxis es

S = spdiags(B,d,m,n) 

Para crear una matriz de salida de los elementos de tamaño por con con las diagonales:Smnp

  • es una matriz de tamaño por.Bmin(m,n)p Las columnas de son los valores para rellenar las diagonales de.BS

  • es un vector de longitud cuyos elementos enteros especifican qué diagonales de para rellenar.dpS

Es decir, los elementos en la columna de rellenar la diagonal especificada por el elemento de.jBjd

Nota

Si una columna es más larga que la diagonal que está reemplazando, las superdiagonales se toman de la parte inferior de la columna, y las sub-diagonales se toman de la parte superior de la columna de.BBB

Como ejemplo, considere la matriz y el vector.Bd

B = [ 41    11     0       52    22     0       63    33    13       74    44    24 ];  d = [-3       0       2];

Utilice estas matrices para crear una matriz dispersa de 7 por 4:A

A = spdiags(B,d,7,4)
A =     (1,1)       11    (4,1)       41    (2,2)       22    (5,2)       52    (1,3)       13    (3,3)       33    (6,3)       63    (2,4)       24    (4,4)       44    (7,4)       74

En su forma completa, se ve así:A

full(A)
ans =      11     0    13     0      0    22     0    24      0     0    33     0     41     0     0    44      0    52     0     0      0     0    63     0      0     0     0    74

también puede extraer elementos diagonales de una matriz dispersa, o reemplazar elementos de la diagonal de la matriz con nuevos valores.spdiags Escriba para obtener más información.helpspdiags

Importación de matrices dispersas

Puede importar matrices dispersas desde cálculos fuera del entorno.MATLAB Utilice la función junto con el comando para importar archivos de texto que contengan listas de índices y elementos distintos de cero.spconvertload Por ejemplo, considere un archivo de texto de tres columnas cuya primera columna es una lista de índices de fila, la segunda columna es una lista de índices de columna y la tercera columna es una lista de valores distintos de cero.T.dat Estas sentencias se cargan y convierten en una matriz dispersa:T.datMATLABS

load T.dat S = spconvert(T)

Los comandos y también pueden procesar matrices dispersas almacenadas como datos binarios en archivos MAT.saveload

Consulte también

|

Temas relacionados