Main Content

Indexación de arreglos

En MATLAB®, existen tres enfoques principales para acceder a los elementos de un arreglo en función de su ubicación (índice) en el arreglo. Estos enfoques son: indexado por posición, indexado lineal e indexado lógico.

Indexado con posiciones de elementos

El método más frecuente es especificar de manera explícita los índices de los elementos. Por ejemplo, para acceder a un único elemento de una matriz, especifique el número de fila seguido del número de columna del elemento.

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A = 4×4

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

e = A(3,2)
e = 10

e es el elemento de la posición 3,2 (tercera fila, segunda columna) de A.

También puede hacer referencia a varios elementos al mismo tiempo especificando sus índices en un vector. Por ejemplo, acceda al primer y tercer elemento de la segunda fila de A.

r = A(2,[1 3])
r = 1×2

     5     7

Para acceder a los elementos de un intervalo de filas o columnas, utilice colon. Por ejemplo, acceda a los elementos de la primera a la tercera fila y de la segunda a la cuarta columna de A.

r = A(1:3,2:4)
r = 3×3

     2     3     4
     6     7     8
    10    11    12

Una forma alternativa de calcular r es utilizar la palabra clave end para especificar la segunda columna hasta la última. Este enfoque le permite especificar la última columna sin saber exactamente cuántas columnas hay en A.

r = A(1:3,2:end)
r = 3×3

     2     3     4
     6     7     8
    10    11    12

Si desea acceder a todas las filas o columnas, utilice el operador de dos puntos solo. Por ejemplo, devuelva la tercera columna completa de A.

r = A(:,3)
r = 4×1

     3
     7
    11
    15

En general, puede utilizar el indexado para acceder a los elementos de cualquier arreglo de MATLAB, independientemente de sus dimensiones o del tipo de datos. Por ejemplo, acceda directamente a una columna de un arreglo datetime.

t = [datetime(2018,1:5,1); datetime(2019,1:5,1)]
t = 2x5 datetime
   01-Jan-2018   01-Feb-2018   01-Mar-2018   01-Apr-2018   01-May-2018
   01-Jan-2019   01-Feb-2019   01-Mar-2019   01-Apr-2019   01-May-2019

march1 = t(:,3)
march1 = 2x1 datetime
   01-Mar-2018
   01-Mar-2019

Para los arreglos con dimensiones superiores, amplíe la sintaxis para que coincida con las dimensiones del arreglo. Considere un arreglo numérico aleatorio de 3 por 3 por 3. Acceda al elemento de la segunda fila, la tercera columna y la primera hoja del arreglo.

A = rand(3,3,3);
e = A(2,3,1)
e = 0.5469

Para obtener más información sobre trabajar con arreglos multidimensionales, consulte Arreglos multidimensionales.

Indexado con un único índice

Otro método para acceder a los elementos de un arreglo es utilizar un único índice, independientemente del tamaño o de las dimensiones del arreglo. Este método se conoce como indexado lineal. Aunque MATLAB muestra arreglos según las formas y los tamaños definidos, en realidad se guardan en la memoria como una única columna de elementos. Una buena forma de visualizar este concepto es con una matriz. Aunque el siguiente arreglo se muestra como una matriz de 3 por 3, MATLAB lo guarda como una única columna formada por las columnas de A anexadas una tras otra. El vector guardado contiene la secuencia de elementos 12, 45, 33, 36, 29, 25, 91, 48, 11 y se puede mostrar utilizando un único carácter de dos puntos.

A = [12 36 91; 45 29 48; 33 25 11]
A = 3×3

    12    36    91
    45    29    48
    33    25    11

Alinear = A(:)
Alinear = 9×1

    12
    45
    33
    36
    29
    25
    91
    48
    11

Por ejemplo, el elemento 3,2 de A es 25 y puede acceder a él mediante la sintaxis A(3,2). También puede acceder a este elemento utilizando la sintaxis A(6), puesto que 25 es el sexto elemento de la secuencia del vector guardado.

e = A(3,2)
e = 25
elinear = A(6)
elinear = 25

Aunque el indexado lineal puede ser menos intuitivo visualmente, puede resultar eficaz a la hora de realizar ciertos cálculos que no dependen del tamaño ni de la forma del arreglo. Por ejemplo, puede sumar fácilmente todos los elementos de A sin tener que proporcionar un segundo argumento a la función sum.

s = sum(A(:))
s = 330

Las funciones sub2ind y ind2sub ayudan a realizar conversiones entre los índices originales del arreglo y su versión lineal. Por ejemplo, calcule el índice lineal del elemento 3,2 de A.

linearidx = sub2ind(size(A),3,2)
linearidx = 6

Vuelva a convertir el índice lineal a su forma de fila y columna.

[row,col] = ind2sub(size(A),6)
row = 3
col = 2

Indexado con valores lógicos

Utilizar indicadores lógicos verdaderos y falsos es otra manera útil de indexar en arreglos, especialmente al trabajar con instrucciones condicionales. Por ejemplo, supongamos que desea saber si los elementos de una matriz A son inferiores a los elementos correspondientes de otra matriz B. El operador "menor que" devuelve un arreglo lógico cuyos elementos son 1 cuando un elemento de A es más pequeño que el elemento correspondiente de B.

A = [1 2 6; 4 3 6]
A = 2×3

     1     2     6
     4     3     6

B = [0 3 7; 3 7 5]
B = 2×3

     0     3     7
     3     7     5

ind = A<B
ind = 2x3 logical array

   0   1   1
   0   1   0

Ahora que ya sabe que las ubicaciones de los elementos cumplen la condición, puede analizar cada uno de los valores utilizando ind como el arreglo de índices. MATLAB hace que las ubicaciones del valor 1 de ind coincidan con los elementos correspondientes de A y B y enumera sus valores en un vector columna.

Avals = A(ind)
Avals = 3×1

     2
     3
     6

Bvals = B(ind)
Bvals = 3×1

     3
     7
     7

Las funciones "is" de MATLAB también devuelven arreglos lógicos que indican qué elementos de la entrada cumplen una condición determinada. Por ejemplo, compruebe qué elementos de un vector string faltan mediante la función ismissing.

str = ["A" "B" missing "D" "E" missing];
ind = ismissing(str)
ind = 1x6 logical array

   0   0   1   0   0   1

Suponga que desea buscar los valores de los elementos que no faltan. Para ello, utilice el operador ~ con el vector índice ind.

strvals = str(~ind)
strvals = 1x4 string
    "A"    "B"    "D"    "E"

Para obtener más ejemplos del uso del indexado lógico, consulte Buscar los elementos de un arreglo que cumplen una condición.

Temas relacionados

Sitios web externos