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.

ind2sub

Convertir índices lineales a subíndices

Descripción

[row,col] = ind2sub(sz,ind) devuelve los arreglos row y col que contienen los subíndices de fila y columna equivalentes correspondientes a los índices lineales ind para una matriz de sz. Aquí, sz es un vector con dos elementos, donde sz(1) especifica el número de filas y sz(2) especifica el número de columnas.

ejemplo

[I1,I2,...,In] = ind2sub(sz,ind) devuelve n arreglos I1,I2,...,In que contienen los subíndices multidimensionales equivalentes correspondientes a los índices lineales ind para un arreglo multidimensional de tamaño sz. Aquí, sz es un vector con n elementos que especifica el tamaño de cada dimensión del arreglo.

ejemplo

Ejemplos

contraer todo

Convierta los índices lineales [3 4 5 6] a subíndices de fila y columna en una matriz de 3 por 3. La asignación de índices lineales a subíndices (indexado por posición) se puede ilustrar de la siguiente manera.

Cree vectores de entrada y realice la conversión.

ind = [3 4 5 6];
sz = [3 3];
[row,col] = ind2sub(sz,ind)
row = 1×4

     3     1     2     3

col = 1×4

     1     2     2     2

Convierta los índices lineales [3 4 5 6] a subíndices en un arreglo de 2 por 2 por 2. La asignación de índices lineales a subíndices (indexado por posición) para un arreglo de 2 por 2 por 2 se puede ilustrar de la siguiente manera.

Cree vectores de entrada y realice la conversión.

ind = [3 4 5 6];
sz = [2 2 2];
[I1,I2,I3] = ind2sub(sz,ind)
I1 = 1×4

     1     2     1     2

I2 = 1×4

     2     2     1     1

I3 = 1×4

     1     1     2     2

Convierta un índice lineal de un arreglo 3D a un índice de subíndice.

Cree un arreglo y encuentre el índice de subíndice correspondiente al 14-ésimo elemento del arreglo.

A = rand(3,4,2);
[row,col,page] = ind2sub(size(A),14)
row = 
2
col = 
1
page = 
2

Compruebe que ambas versiones del índice hacen referencia al mismo elemento del arreglo.

A(14)
ans = 
0.4854
A(row,col,page)
ans = 
0.4854

Cuando se utiliza ind2sub para un arreglo de N dimensiones, normalmente se proporcionan N argumentos de salida para cada dimensión de la matriz. Este ejemplo muestra los diferentes resultados cuando devuelve menos argumentos de salida para un arreglo tridimensional.

Cree los argumentos de entrada necesarios para convertir los índices lineales 1 a 8 para un arreglo tridimensional de tamaño 2 por 2 por 2.

ind = 1:8;
sz = [2 2 2];

Especifique tres argumentos de salida cuando utilice ind2sub para devolver los subíndices de fila, columna y página para el arreglo de 2 por 2 por 2.

[row,col,page] = ind2sub(sz,ind)
row = 1×8

     1     2     1     2     1     2     1     2

col = 1×8

     1     1     2     2     1     1     2     2

page = 1×8

     1     1     1     1     2     2     2     2

Si especifica solo dos argumentos de salida, ind2sub ignora la tercera dimensión del arreglo y devuelve subíndices para un arreglo bidimensional de tamaño 2 por 4 en su lugar.

[row,col] = ind2sub(sz,ind)
row = 1×8

     1     2     1     2     1     2     1     2

col = 1×8

     1     1     2     2     3     3     4     4

Si especifica solo un argumento de salida, ind2sub ignora la segunda y la tercera dimensión del arreglo y devuelve subíndices para un arreglo unidimensional de tamaño 1 por 8 en su lugar.

row = ind2sub(sz,ind)
row = 1×8

     1     2     3     4     5     6     7     8

Cuando se convierten índices lineales en índices de subíndice utilizando un tamaño de matriz objetivo inferior al requerido, la función ind2sub amplía automáticamente el tamaño de la matriz según sea necesario.

Por ejemplo, defina índices lineales que estén fuera del tamaño de la matriz de 3 por 1.

ind = [9 11 13 14]
ind = 1×4

     9    11    13    14

Convierta estos índices en índices de subíndice para una matriz de 3 por 1.

[row,col] = ind2sub([3 1],ind)
row = 1×4

     3     2     1     2

col = 1×4

     3     4     5     5

ind2sub no genera ningún error para esta operación. En cambio, ind2sub añade columnas automáticamente y amplía el tamaño de la matriz a 3 por 5 para acomodar la conversión de los índices lineales especificados a índices de subíndice.

Para realizar una comparación, convierta los mismos índices lineales en índices de subíndice para una matriz de 3 por 5. Los índices de subíndice resultantes para una matriz de 3 por 5 y para una matriz de 3 por 1 son los mismos.

[row,col] = ind2sub([3 5],ind)
row = 1×4

     3     2     1     2

col = 1×4

     3     4     5     5

Argumentos de entrada

contraer todo

Tamaño de un arreglo, especificado como vector de enteros positivos. Cada elemento de este vector indica el tamaño de la dimensión correspondiente. Por ejemplo, [2 3 4] define un arreglo de 2 por 3 por 4.

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

Índices lineales, especificados como escalar, vector, matriz o arreglo multidimensional.

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

Argumentos de salida

contraer todo

Subíndices de fila, devueltos como escalar, vector, matriz o arreglo multidimensional. El tamaño de row es igual que el tamaño de la entrada ind.

Tipos de datos: double

Subíndices de columna, devueltos como escalar, vector, matriz o arreglo multidimensional. El tamaño de col es igual que el tamaño de la entrada ind.

Tipos de datos: double

Subíndices multidimensionales, devueltos como escalar, vector, matriz o arreglo multidimensional. El tamaño de cada arreglo I1,I2,…,In es igual que el tamaño de la entrada ind.

Tipos de datos: double

Sugerencias

  • Para obtener los índices lineales de elementos de matriz que satisfagan una condición específica para la matriz A, puede utilizar la función find con un argumento de salida. Para obtener los índices de subíndice, utilice la función find con dos argumentos de salida. Por ejemplo, [row,col] = ind2sub(size(A),find(A>5)) proporciona el mismo resultado que [row,col] = find(A>5).

Algoritmos

Para un arreglo A, si [I1,…,In] = ind2sub(size(A),ind), A(I1(k),…,In(k)) = A(ind(k)) para todo k.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido antes de R2006a

expandir todo