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
- Access Data Using Categorical Arrays
- Acceder a datos en tablas
- Arreglos de estructuras
- Acceder a datos en arreglos de celdas