La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.
Indexación
Subíndices
El elemento de la fila i
y la columna j
de A
se indica con A(i,j)
. Por ejemplo, A(4,2)
es el número de la cuarta fila y la segunda columna. Para el cuadrado mágico, A(4,2)
es 15
. Por lo tanto, para calcular la suma de los elementos de la cuarta columna de A
, escriba
A(1,4) + A(2,4) + A(3,4) + A(4,4)
Esta instrucción produce
ans = 34
pero no es la forma más elegante de sumar una sola columna.
También es posible referirse a los elementos de una matriz usando un solo subíndice, A(k)
. Esta es la manera habitual de hacer referencia a vectores fila y columna. Sin embargo, también puede aplicarse a una matriz totalmente bidimensional, en cuyo caso, el arreglo se considera como un vector columna largo conformado por las columnas de la matriz original. Por lo tanto, para el cuadrado mágico, A(8)
es otra forma de referirse al valor 15
que está almacenado en A(4,2)
.
Si intenta usar el valor de un elemento fuera de la matriz, se genera un error:
t = A(4,5)
Index exceeds matrix dimensions.
A la inversa, si almacena un valor en un elemento fuera de la matriz, el tamaño aumenta para dar cabida al nuevo elemento:
X = A; X(4,5) = 17 X = 16 3 2 13 0 5 10 11 8 0 9 6 7 12 0 4 15 14 1 17
El operador dos puntos
El operador dos puntos, :
, es uno de los operadores más importantes de MATLAB®. Se usa de varias formas diferentes. La expresión
1:10
es un vector fila que contiene los números enteros del 1 al 10:
1 2 3 4 5 6 7 8 9 10
Para obtener una separación no unitaria, especifique un incremento. Por ejemplo:
100:-7:50
es
100 93 86 79 72 65 58 51
y
0:pi/4:pi
es
0 0.7854 1.5708 2.3562 3.1416
Las expresiones de subíndice que incluyen dos puntos se refieren a distintas partes de una matriz:
A(1:k,j)
son los primeros k
elementos de la j
-ésima columna de A
. De esta manera,
sum(A(1:4,4))
calcula la suma de la cuarta columna. Sin embargo, hay una forma mejor de realizar este cálculo. Los dos puntos aislados se refieren a todos los elementos de una fila o columna de una matriz y la palabra clave end
se refiere a la última fila o columna. De esta manera,
sum(A(:,end))
calcula la suma de los elementos de la última columna de A
:
ans = 34
¿Por qué la suma mágica para un cuadrado de 4 por 4 es igual a 34? Si los enteros del 1 al 16 están ordenados en cuatro grupos con sumas iguales, esa suma debe ser
sum(1:16)/4
lo que, naturalmente, es
ans = 34
Concatenación
La concatenación es el proceso de unir matrices pequeñas para crear otras más grandes. De hecho, el primer arreglo de este libro resultó de la concatenación de sus elementos individuales. El operador de concatenación es el par de corchetes: []
. A modo de ejemplo, comience con el cuadrado mágico de 4 por 4, A
, y forme
B = [A A+32; A+48 A+16]
El resultado es una matriz de 8 por 8 que se obtiene a partir de la unión de las cuatro submatrices:
B = 16 3 2 13 48 35 34 45 5 10 11 8 37 42 43 40 9 6 7 12 41 38 39 44 4 15 14 1 36 47 46 33 64 51 50 61 32 19 18 29 53 58 59 56 21 26 27 24 57 54 55 60 25 22 23 28 52 63 62 49 20 31 30 17
Esta matriz está a medio camino de ser otro cuadrado mágico. Sus elementos son una redistribución de los enteros 1:64
. Las sumas de sus columnas son el valor correcto para un cuadrado mágico de 8 por 8:
sum(B) ans = 260 260 260 260 260 260 260 260
Pero las sumas de sus filas, sum(B')'
, no son todas iguales. Se necesita una manipulación adicional para convertir esta matriz en un cuadrado mágico de 8 por 8 válido.
Eliminación de filas y columnas
Es posible eliminar filas y columnas de una matriz usando solamente un par de corchetes. Comience con
X = A;
Luego, para eliminar la segunda columna de X
, use
X(:,2) = []
Así, X
cambia de la siguiente manera:
X = 16 2 13 5 11 8 9 7 12 4 14 1
Si se elimina un solo elemento de una matriz, el resultado ya no es una matriz. Por lo tanto, expresiones como
X(1,2) = []
dan como resultado un error. Sin embargo, al utilizar un solo subíndice, se elimina un solo elemento o secuencia de elementos, y se vuelve a dar forma a los elementos restantes en un vector fila. Por lo tanto,
X(2:2:10) = []
da como resultado
X = 16 9 2 7 13 12 1
Expansión escalar
Las matrices y los escalares se pueden combinar de varias maneras. Por ejemplo, un escalar se sustrae de una matriz restándolo de cada elemento. El valor promedio de los elementos de nuestro cuadrado mágico es 8,5; por lo tanto,
B = A - 8.5
forma una matriz cuyas sumas de columnas son cero:
B = 7.5 -5.5 -6.5 4.5 -3.5 1.5 2.5 -0.5 0.5 -2.5 -1.5 3.5 -4.5 6.5 5.5 -7.5 sum(B) ans = 0 0 0 0
Con la expansión escalar, MATLAB asigna un escalar especificado a todos los índices de un rango. Por ejemplo:
B(1:2,2:3) = 0
asigna ceros a una parte de B
:
B = 7.5 0 0 4.5 -3.5 0 0 -0.5 0.5 -2.5 -1.5 3.5 -4.5 6.5 5.5 -7.5
Subíndices lógicos
Los vectores lógicos que se crean a partir de operaciones lógicas y relacionales se pueden utilizar para hacer referencia a subarreglos. Suponga que X
es una matriz común y corriente y que L
es una matriz del mismo tamaño que es el resultado de alguna operación lógica. Entonces, X(L)
especifica los elementos de X
donde los elementos de L
no son cero.
Este tipo de creación de subíndices se puede realizar en un solo paso especificando la operación lógica como la expresión de subíndice. Suponga que tiene el siguiente conjunto de datos:
x = [2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8];
El NaN
es un marcador para una observación faltante, como por ejemplo una pregunta que quedó sin responder en un cuestionario. Para eliminar los datos que faltan con indexación lógica, use isfinite(x)
, que es verdadero para todos los valores numéricos finitos y falso para NaN
e Inf
:
x = x(isfinite(x)) x = 2.1 1.7 1.6 1.5 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8
Ahora bien, hay una observación, 5.1
, que parece ser muy diferente de las otras. Es un valor atípico. La siguiente instrucción elimina los valores atípicos; en este caso, aquellos elementos que difieren de la media por más de tres desviaciones estándar:
x = x(abs(x-mean(x)) <= 3*std(x)) x = 2.1 1.7 1.6 1.5 1.9 1.8 1.5 1.8 1.4 2.2 1.6 1.8
Para tener otro ejemplo, resalte la ubicación de los números primos en el cuadrado mágico de Durero. Utilice indexación lógica y expansión escalar para asignar ceros a los números no primos. (Consulte La función magic).
A(~isprime(A)) = 0 A = 0 3 2 13 5 0 11 0 0 0 7 0 0 0 0 0
La función find
La función find
determina los índices de elementos de arreglos que cumplen con una determinada condición lógica. En su forma más simple, find
devuelve un vector columna de índices. Trasponga ese vector para obtener un vector fila de índices. Por ejemplo, comience nuevamente con el cuadrado mágico de Durero. (Consulte La función magic).
k = find(isprime(A))'
selecciona, mediante indexación unidimensional, las ubicaciones de los primos del cuadrado mágico:
k = 2 5 9 10 11 13
Muestre dichos primos, como un vector fila en el orden determinado por k
, con
A(k) ans = 5 3 2 11 7 13
Cuando se usa k
como índice a la izquierda de una instrucción de asignación, la estructura de la matriz se mantiene:
A(k) = NaN A = 16 NaN NaN NaN NaN 10 NaN 8 9 6 NaN 12 4 15 14 1