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. También puede utilizar indexado mixto combinando el indexado por posición y el 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 el operador 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 acceder a esos elementos es utilizar la palabra clave end
para representar la última columna. 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 fila completa de A
.
r = A(3,:)
r = 1×4
9 10 11 12
También puede acceder a la penúltima columna de A
utilizando el operador de dos puntos y la palabra clave end
.
r = A(:,end-1)
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 = 2×5 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 = 2×1 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 almacenan en la memoria columna por columna, de izquierda a derecha. 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 menores que 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 menor 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 = 2×3 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 de cadena faltan utilizando la función ismissing
.
str = ["A" "B" missing "D" "E" missing]; ind = ismissing(str)
ind = 1×6 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 = 1×4 string
"A" "B" "D" "E"
Para obtener más ejemplos del uso del indexado lógico, consulte Encontrar los elementos de un arreglo que cumplen condiciones.
Indexado mixto con valores lógicos y posiciones de elementos
También puede utilizar una combinación de indexado por posición e indexado lógico para acceder a elementos del arreglo.
Por ejemplo, cree una matriz de 5 por 5.
A = magic(5)
A = 5×5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
Suponga que desea seleccionar los elementos de A situados en filas con índices primos y en columnas con índices 2, 3, y 4.
Para hacerlo, cree un vector B
que represente los índices de las filas de A
.
B = (1:size(A,1))
B = 1×5
1 2 3 4 5
Utilice la función isprime
para determinar qué elementos de B
son primos. El resultado es un arreglo lógico que puede utilizar para indexar en las filas de A
.
rows = isprime(B)
rows = 1×5 logical array
0 1 1 0 1
Luego, defina las columnas que desea seleccionar, que están situadas en las posiciones 2 a 4.
cols = 2:4
cols = 1×3
2 3 4
Utilice indexado lógico para seleccionar las filas de A
situadas en posiciones de números primos, tal como se define en rows
. Después, utilice el indexado por posición para seleccionar las columnas de A
que van de las posiciones 2 a 4, tal como se define en cols
.
A(rows,cols)
ans = 3×3
5 7 14
6 13 20
18 25 2
Consulte también
Temas
- Access Data Using Categorical Arrays
- Acceder a datos en tablas
- Arreglos de estructuras
- Acceder a datos en arreglos de celdas
- Indexed Assignment
- Detailed Rules for Array Indexing