Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

sparse

Crear una matriz dispersa

Descripción

S = sparse(A) convierte una matriz completa a una en forma dispersa eliminando todos los elementos cero. Si una matriz contiene muchos ceros, convertir la matriz a almacenamiento disperso ahorra memoria.

ejemplo

S = sparse(m,n) genera una matriz dispersa de m por n en la que todos los elementos son ceros.

ejemplo

S = sparse(m,n,typename) genera una matriz dispersa de m por n en la que todos los elementos son cero del tipo de datos especificado. (desde R2025a)

S = sparse(i,j,v) genera una matriz dispersa S a partir de los tripletes i, j y v de forma que S(i(k),j(k)) = v(k). La matriz de salida de max(i) por max(j) tiene espacio asignado para los elementos distintos de cero length(v).

Si las entradas i, j y v son vectores o matrices, deben tener el mismo número de elementos. Como alternativa, el argumento v o uno de los argumentos i o j pueden ser escalares.

ejemplo

S = sparse(i,j,v,m,n) especifica el tamaño de S como m por n.

ejemplo

S = sparse(i,j,v,m,n,nz) asigna espacio para nz elementos distintos de cero. Utilice esta sintaxis para asignar espacio adicional para que los valores distintos de cero se rellenen después de la construcción.

ejemplo

Ejemplos

contraer todo

Cree una matriz identidad de almacenamiento completa de 10.000 por 10.000.

A = eye(10000);
whos A
  Name          Size                   Bytes  Class     Attributes

  A         10000x10000            800000000  double              

Esta matriz utiliza 800 megabytes de memoria.

Convierta la matriz en almacenamiento disperso.

S = sparse(A);
whos S
  Name          Size                Bytes  Class     Attributes

  S         10000x10000            240008  double    sparse    

En la forma dispersa, la misma matriz utiliza aproximadamente 0,25 megabytes de memoria. En este caso, puede evitar totalmente el almacenamiento completo utilizando la función speye, que crea matrices identidad dispersas directamente.

S = sparse(10000,5000)
S = 10000×5000 sparse double matrix
   All zero

Cree una matriz dispersa de 1.500 por 1.500 a partir de los tripletes i, j y v.

i = [900 1000];
j = [900 1000];
v = [10 100];
S = sparse(i,j,v,1500,1500)
S = 1500×1500 sparse double matrix (2 nonzeros)
 (900,900)     10
(1000,1000)   100

Cuando se especifica un tamaño mayor que max(i) por max(j), la función sparse rellena la salida con filas y columnas adicionales de ceros.

size(S)
ans = 1×2

        1500        1500

Cree una matriz dispersa con 10 valores distintos de cero, pero que tenga espacio asignado para 100 valores distintos de cero.

S = sparse(1:10,1:10,5,20,20,100);
N = nnz(S)
N = 
10
N_alloc = nzmax(S)
N_alloc = 
100

La función spalloc es una forma abreviada de crear una matriz dispersa sin elementos distintos de cero pero que tiene espacio asignado para un cierto número de elementos distintos de cero.

Utilice subíndices repetidos para acumular valores en una única matriz dispersa que de otro modo requeriría uno o más bucles.

Cree un vector columna de datos y dos vectores columna de subíndices.

i = [6 6 6 5 10 10 9 9]';
j = [1 1 1 2 3 3 10 10]';
v = [100 202 173 305 410 550 323 121]';

Visualice los subíndices y valores uno al lado del otro.

[i,j,v]
ans = 8×3

     6     1   100
     6     1   202
     6     1   173
     5     2   305
    10     3   410
    10     3   550
     9    10   323
     9    10   121

Utilice la función sparse para acumular los valores que tienen subíndices idénticos.

S = sparse(i,j,v)
S = 10×10 sparse double matrix (4 nonzeros)
   (6,1)      475
   (5,2)      305
  (10,3)      960
   (9,10)     444

Argumentos de entrada

contraer todo

Matriz de entrada, especificada como una matriz completa o dispersa. Si A ya es dispersa, sparse(A) devuelve A.

Tipos de datos: single | double | logical
Soporte de números complejos:

Pares de subíndices, especificados como argumentos separados de escalares, vectores o matrices. Los elementos correspondientes en i y j especifican pares de subíndices S(i,j), que determinan la ubicación de los valores en v en la salida. i y j deben tener el mismo tipo de datos. Si i o j es un vector o una matriz, la otra entrada puede ser un escalar o puede ser un vector o una matriz con el mismo número de elementos. En ese caso, sparse utiliza i(:) y j(:) como subíndices.

Si i y j tienen valores idénticos para varios elementos en v, sparse agrega los valores en v que tienen índices repetidos. El comportamiento de agregación depende del tipo de datos de los valores de v:

  • Para valores lógicos, sparse aplica la función any.

  • Para valores dobles, sparse aplica la función sum.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Valores, especificados como un escalar, un vector o una matriz. Si v es un vector o una matriz, una de las entradas i o j también debe ser un vector o una matriz con el mismo número de elementos.

Cualquier elemento de v que sea cero se ignora, al igual que los subíndices correspondientes en i y j. Sin embargo, si no especifica los tamaños de dimensión de la salida, m y n, sparse calcula los máximos m = max(i) y n = max(j) antes de ignorar cualquier elemento cero de v.

Tipos de datos: single | double | logical
Soporte de números complejos:

Tamaño de cada dimensión, especificado como argumentos separados de valores enteros. Si especifica m (el tamaño de la fila), también debe especificar n (el tamaño de la columna).

Si no especifica m y n, sparse utiliza los valores predeterminados m = max(i) y n = max(j). Estos máximos se calculan antes de eliminar cualquier cero de v.

Desde R2025a

Tipo de datos de salida, especificado como "double", "single" o "logical".

Asignación de almacenamiento para los elementos distintos de cero, especificada como un entero no negativo. nz generalmente debe ser mayor o igual que max([numel(i), numel(j), numel(v), 1]). Sin embargo, si los tamaños de i, j y v le permiten especificar un valor de 0 para nz, sparse establece el valor en 1.

Para una matriz dispersa, S, la función nnz devuelve el número de elementos distintos de cero en la matriz, y la función nzmax devuelve la cantidad de almacenamiento asignada para los elementos de la matriz distintos de cero. Si nnz(S) y nzmax(S) devuelven resultados diferentes, es posible que se haya asignado más almacenamiento del que realmente se requiere. Por este motivo, configure nz solo en previsión de rellenarlo más tarde.

Si no especifica nz, sparse utiliza un valor predeterminado de max([numel(i), numel(j), numel(v), 1]).

Argumentos de salida

contraer todo

Matriz de salida, devuelta como una matriz dispersa.

Limitaciones

  • Si alguna de las entradas i,j o m,n es mayor que 2^31-1 en plataformas de 32 bits, o 2^48-1 en plataformas de 64 bits, la matriz dispersa no se puede construir.

Sugerencias

  • MATLAB® almacena matrices dispersas en formato de columna dispersa comprimida. Para obtener más información, consulte John R. Gilbert, Cleve Moler, and Robert Schreiber's Sparse Matrices In MATLAB: Design and Implementation.

  • La función accumarray tiene un comportamiento de acumulación similar al de sparse.

    • accumarray agrupa los datos en bins utilizando subíndices de n dimensiones, pero sparse agrupa los datos en bins con subíndices 2D.

    • accumarray añade elementos que tienen subíndices idénticos en la salida de forma predeterminada, pero opcionalmente puede aplicar cualquier función a los bins. sparse aplica la función sum a los elementos que tienen subíndices idénticos en la salida (para valores dobles) o aplica la función any (para valores lógicos).

Referencias

[1] Gilbert, John R., Cleve Moler, and Robert Schreiber. “Sparse Matrices in MATLAB: Design and Implementation.” SIAM Journal on Matrix Analysis and Applications 13, no. 1 (January 1992): 333–356. https://doi.org/10.1137/0613024.

[2] Chen, Yanqing, Timothy A. Davis, William W. Hager, and Sivasankaran Rajamanickam. “Algorithm 887: CHOLMOD, Supernodal Sparse Cholesky Factorization and Update/Downdate.” ACM Transactions on Mathematical Software 35, no. 3 (October 2008): 1–14. https://doi.org/10.1145/1391989.1391995.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido antes de R2006a

expandir todo