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.

Encontrar elementos de matriz que cumplen una condición

En este ejemplo se muestra cómo filtrar los elementos de una matriz aplicando condiciones a la matriz. Por ejemplo, puede examinar los elementos Even en una matriz, encontrar la ubicación de todos los 0s en una matriz multidimensional o reemplazar los valores en los datos.Nan Puede realizar estas tareas mediante una combinación de los operadores relacionales y lógicos. Los operadores relacionales (,,,,,) imponen condiciones en la matriz y puede aplicar varias condiciones conectándolas con los operadores lógicos y, respectivamente, denotadas por los símbolos y.><>=<===~=andornot&|~

Aplicar una sola condición

Para aplicar una única condición, empiece por crear una matriz de 5 por 5 que contenga enteros aleatorios entre 1 y 15. Restablezca el generador de números aleatorios al estado predeterminado para reproducibilidad.

rng default A = randi(15,5)
A = 5×5

    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 relacional, para determinar qué elementos son menores que 9.less than<A Almacene el resultado en.B

B = A < 9
B = 5x5 logical array

   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 en representa un estado lógico () o lógico () para indicar si el elemento correspondiente de cumple la condición.B1true0falseAA < 9 Por ejemplo, es, por lo tanto, es lógico ().A(1,1)13B(1,1)0false Sin embargo, es, por lo que es lógico ().A(1,2)2B(1,2)1true

Aunque contiene información sobre los elementos en son menores que 9, no le dice lo que son.BwhichAvalues En lugar de comparar el elemento de dos matrices por elemento, puede utilizar para indexar en.BA

A(B)
ans = 8×1

     2
     2
     5
     3
     8
     3
     7
     1

El resultado es un vector de columna de los elementos en que son menores que 9.A Puesto que es una matriz lógica, se llama a esta operación.Blogical indexing En este caso, la matriz lógica que se usa como índice es del mismo tamaño que la otra matriz, pero esto no es un requisito. Para obtener más información, consulte.Indexación de matrices

Algunos problemas requieren información sobre los elementos de la matriz que cumplen una condición en lugar de sus valores reales.locations En este ejemplo, puede utilizar la función para ubicar todos los elementos en menos de 9.findA

I = find(A < 9)
I = 8×1

     3
     6
     7
    11
    14
    16
    17
    22

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

Aplicar condiciones múltiples

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

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

A(A<9 & A>2)
ans = 5×1

     5
     3
     8
     3
     7

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

A continuación, busque los elementos que son y.Aless than 9even numbered

A(A<9 & ~mod(A,2))
ans = 3×1

     2
     2
     8

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

Finalmente, encontrar los elementos en que son y y.Aless than 9even numberednot equal to 2

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

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

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

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 cumplen una condición.

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

A(A>10) = 10
A = 5×5

    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 continuación, reemplace todos los valores que no son iguales a 10 con un valor.ANan

A(A~=10) = NaN
A = 5×5

    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

Por último, reemplace todos los valores con ceros y aplique el operador lógico NOT,.NanA~A

A(isnan(A)) = 0; C = ~A
C = 5x5 logical array

   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 Logical () en lugar de los valores, y Logical () en lugar del 10s.1trueNan0false La operación NOT lógica, convierte la matriz numérica en una matriz lógica que devuelve una matriz de valores lógicos () y devuelve una matriz de valores lógicos ().~AA&C0falseA|C1true

Consulte también

| | | | | | |