Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página 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 diferentes. 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