Funciones Lógicas

Comprobación de condiciones

Un primer grupo sirve para saber si existen números especiales (infinitos, no definidos, not a number) en una matriz:

isinf(X)
devuelve matriz de 0s y 1s, donde estarán a 1 los elementos que sean infinito  (Inf ó -Inf).
isnan(X)
devuelve matriz de 0s y 1s, donde estarán a 1 los elementos que sean not a number (NaN) o números no definidos (NA).
finite(X)
devuelve matriz de 0s y 1s, donde estarán a 1 los elementos que no sean infinitos ni not a number.
isna(X)
devuelve matriz de 0s y 1s, donde estarán a 1 los elementos que no sean números no definidos (NA).

Operaciones dentro de la matriz

Sirven para hacer operaciones booleanas sobre los elementos de una matriz. Están pensadas para aplicarse sobre matrices lógicas (de 0s y 1s), pero se pueden aplicar a cualquier matriz en cuyo caso, como es habitual en Octave, consideran los elementos a 0 como falsos y el resto (distintos de 0) como verdaderos. Realizan la operación por columnas (como las funciones de análisis de datos), devolviendo un vector fila. En caso de aplicarse a un vector, sea fila o columna, realizan la operación sobre todos los elementos del vector y devuelven un escalar.

any(X)
realiza la o-lógica sobre los elementos de cada columna de la matriz.
all(X)
realiza la y-lógica sobre los elementos de cada columna de la matriz.

Búsqueda

Una última función sirve para encontrar, dentro de una matriz, los elementos que son verdad (distinto de 0):

[i,j,v]=find(X)
devuelve los índices de fila (i) y columna (j) de los elementos que son verdad (distintos de 0). En v devuelve el valor de dichos elementos.
find(X)
es equivalente a find(vec(X)).

Ejemplos

  • Dadas X=[1,-1,0;0,NA,1], Y=[0,0,1;0,0,1] y Z=X./Y, aplicar las funciones isinf, isnan, finite e isna a Z.
  • [i,j,v]=find(Z) devolverá los indices de los elementos que son distintos de 0 y su valor.
  • Ver que el vector v obtenido en el punto anterior es equivalente a Z(find(Z))
  • Dada una matriz M para saber si todos los elementos son mayores que 5 podemos hacer all(all( M>5 )).
  • Dada una matriz M para saber hay algún elemento menor o igual de 20 podemos hacer any(any( M<20 )).

Como se ve, combinando adecuadamente estas funciones con los operadores de relación y la indexación de matrices se pueden realizar de manera compacta operaciones que, en otros lenguajes de programación, suponen el uso de estructuras de bucles (for) y condicionales (if).

Obra colocada bajo licencia Creative Commons Attribution Non-commercial Share Alike 3.0 License