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.

Buscar elementos de matriz que cumplen una condición

Puede filtrar los elementos de una matriz aplicando una o más condiciones a la matriz. Por ejemplo, si desea examinar sólo los elementos pares de una matriz, busque la ubicación de todos los 0s en una matriz multidimensional o reemplace los valores de NaN en un conjunto discreto de datos. Puede realizar estas tareas utilizando una combinación de los operadores lógicos y relacionales. Los operadores relacionales (>, <, >=, <=, ==, ~=) imponen condiciones al arreglo de discos y se pueden aplicar varias condiciones conectándolos con los operadores lógicos and, or y not, denotados respectivamente por &, | y ~.

Aplicar una sola condición

Para aplicar una sola condición, comience por crear una matriz de 5 por 5, A, que contenga enteros aleatorios entre 1 y 15.

rng default A = randi(15,5)
A =      13     2     3     3    10     14     5    15     7     1      2     9    15    14    13     14    15     8    12    15     10    15    13    15    11

Utilice el operador de menos de relacional, <, para determinar qué elementos de A son inferiores a 9. Almacene el resultado en B.

B = A < 9
B =       0     1     1     1     0      0     1     0     1     1      1     0     0     0     0      0     0     1     0     0      0     0     0     0     0

El resultado es una matriz lógica. Cada valor de B representa un estado lógico de 1 (true) o 0 lógico (false) para indicar si el elemento correspondiente de A satisface la condición A < 9. Por ejemplo, A(1,1) es 13, por lo que B(1,1) es 0 lógico (false). Sin embargo, A(1,2) es 2, por lo que B(1,2) es 1 lógico (true).

Aunque B contiene información acerca de los elementos que en A son menos de 9, no le dice cuáles son sus valores. En lugar de comparar el elemento de dos matrices por elemento, utilice B para indexar en A.

A(B)
ans =       2      2      5      3      8      3      7      1

El resultado es un vector de columna de los elementos en A que son menores de 9. Dado que B es una matriz lógica, esta operación se denomina indexación lógica. En este caso, la matriz lógica que se utiliza como índice es del mismo tamaño que la otra matriz, pero no es un requisito. Para obtener más información, vea Uso de lógicas en la indización de matrices.

Algunos problemas requieren información sobre la localizaciones de los elementos de la matriz que cumplen una condición en lugar de sus valores reales. En este ejemplo, utilice la función find para localizar todos los elementos de A menos de 9.

I = find(A < 9)
I =       3      6      7     11     14     16     17     22

El resultado es un vector columna de índices lineales. Cada índice describe la ubicación de un elemento en A que es menor que 9, por lo que en la práctica A(I) devuelve el mismo resultado que A(B). La diferencia es que A(B) utiliza la indexación lógica, mientras que A(I) utiliza la indexación lineal.

Aplicar múltiples condiciones

Puede utilizar los operadores lógicos and, or y not para aplicar cualquier número de condiciones a una matriz; el número de condiciones no se limita a uno o dos.

En primer lugar, utilice el operador and lógico, denotado &, para especificar dos condiciones: los elementos deben ser inferiores a 9 y superiores a 2. Especifique las condiciones como un índice lógico para ver los elementos que satisfacen ambas condiciones.

A(A<9 & A>2)
ans =       5      3      8      3      7

El resultado es una lista de los elementos en A que satisfacen ambas condiciones. Asegúrese de especificar cada condición con una instrucción separada conectada por un operador lógico. Por ejemplo, no puede especificar las condiciones anteriores por A(2<A<9), ya que se evalúa como A(2<A | A<9).

A continuación, busque los elementos en A que son menores de 9 e incluso numerados.

A(A<9 & ~mod(A,2))
ans =       2      2      8

El resultado es una lista de todos los elementos uniformes en A que son menores de 9. El uso del operador lógico not, ~, convierte la matriz mod(A,2) en una matriz lógica, con un valor de 1 lógico (true) ubicado donde un elemento es uniformemente divisible por 2.

Finalmente, encuentre los elementos en A que son menos de 9 e incluso numerados y no igual a 2.

A(A<9 & ~mod(A,2) & A~=2)
ans =       8

El resultado, 8, es incluso, menos de 9, y no igual a 2. Es el único elemento en A que satisface las tres condiciones.

Utilice la función find para obtener el índice del elemento 8 que satisface las condiciones.

find(A<9 & ~mod(A,2) & A~=2)
ans =      14

El resultado indica que A(14) = 8.

Reemplazar valores que cumplen una condición

A veces es útil cambiar simultáneamente los valores de varios elementos de matriz existentes. Utilice la indización lógica con una instrucción de asignación simple para reemplazar los valores de una matriz que cumpla una condición.

Reemplace todos los valores en A que sean mayores que 10 con el número 10.

A(A>10) = 10
A =      10     2     3     3    10     10     5    10     7     1      2     9    10    10    10     10    10     8    10    10     10    10    10    10    10

A ahora tiene un valor máximo de 10.

Reemplace todos los valores de A que no sean iguales a 10 con un valor NaN.

A(A~=10) = NaN
A =      10   NaN   NaN   NaN    10     10   NaN    10   NaN   NaN    NaN   NaN    10    10    10     10    10   NaN    10    10     10    10    10    10    10

La matriz resultante tiene valores de elemento de 10 o NaN.

Reemplace todos los valores de NaN en A con ceros y aplique el operador no lógico, ~A.

A(isnan(A)) = 0; C = ~A
C =       0     1     1     1     0      0     1     0     1     1      1     1     0     0     0      0     0     1     0     0      0     0     0     0     0

La matriz resultante tiene valores de 1 lógico (true) en lugar de los valores NaN, y 0 lógico (false) en lugar de los 10s. La operación lógica not, ~A, convierte la matriz numérica en una matriz lógica de forma que A&C devuelve una matriz de valores 0 lógicos (false) y A|C devuelve una matriz de valores lógicos 1 (true).

Consulte también

| | | | | | |