or OU logique entre éléments d'un tableau booléen ou numérique

## Syntaxe

                b = or(A)
                b = or(A, 'r')
                b = or(A, 'c')
                b = or(A, n)

## Paramètres

A

  vecteur, matrice ou hypermatrice de booléens, d'entiers encodés (de type entier inttype quelconque), de décimaux, ou de nombres complexes. `A` peut être encodée creuse (sparse).

  Un nombre est identifié à `%F` (faux) s'il vaut 0 ou 0+0i. Sinon (%nan inclus), il est identifé à `%T` (vrai).

  Valeurs particulières de `A` :
  - `or([])` vaut `%F`.
  - `or(%nan)` vaut `%T`.
b

  Booléen simple si `or(A)` est utilisée sans option `"r", "c", n`. `b` vaut alors

  - %F, si tous les éléments de `A` sont %F ou nuls.
  - %T, sinon : au moins un des éléments de `A` est %T ou non nul.

  Sinon : vecteur ligne, colonne, matrice ou hypermatrice. Voir la description de `n` ci-dessous.

  Lorsque `A` est encodée creuse, `b` l'est également.

n

  N° <= ndims(A) de la dimension selon laquelle `or()` est appliqué / projeté. Par défaut, `or()` est appliqué entre tous les éléments de `A`. Sinon :

  - n = 1 | "r" : `or()` est appliqué entre les lignes de `A`. Si `A` est une matrice, `b` est alors une ligne, avec `b(j) = or(A(:,j))`
  - n = 2 | "c" : `or()` est appliqué entre les colonnes de `A`. Si `A` est une matrice, `b` est alors une colonne, avec `b(i) = or(A(i,:))`.
  - n > 2 : Si `A` est une hypermatrice `or()` est appliqué selon sa nème dimension.

    Exemple: Si `ndims(A)==3` et `n=3`, `b` sera une matrice booléenne de tailles `size(A)([1 2])`, avec `b(i,j) = or(A(i,j,:))`.

## Description

`or()` applique un "OU" logique entre les éléments de l'opérande unique `A`, et en calcule le résultat.

Pour appliquer un OU logique entre éléments respectifs de 2 tableaux `C` et `D` de mêmes tailles, utiliser l'opérateur dédié `|`.

Pourquoi `or([])` vaut-il `%F` ? Quels que soient les tableaux compatibles `B` et `C`, `or([B C]) == (or(B) | or(C))`. Or, pour `B = []`, `or([B C])==or(C)`. Pour avoir toujours `(or([]) | or(C)) == or(C)`, `or([])` doit impérativement être `%F`.

## Exemples

    or([])
    or(0)
    or(0+0*%i)
    or(%eps)
    or(%i)
    or(%nan)

    // Projection à travers une dimension / selon une direction :
    A = rand(2,5)<0.3
    or(A)
    or(A, "r")   // or(A, 1) est équivalent
    or(A, "c")   // or(A, 2) est équivalent

    // Utilisation entre entiers encodés :
    A = int16(grand(3,5,"uin",-10,10));
    A(abs(A)<8) = 0
    or(A)
    or(A,1)

    // Avec une hypermatrice de nombres décimaux :
    A = rand(3,4,2);
    A(A<0.7) = 0
    or(A,3)

    // Avec une matrice encodée creuse :
    A = sprand(70,100, 0.001)
    or(A, "r")
    or(A, "c")

    --> or([])
     ans  =
      F

    --> or(0)
     ans  =
      F

    --> or(0+0*%i)
     ans  =
      F

    --> or(%eps)
     ans  =
      T

    --> or(%i)
     ans  =
      T

    --> or(%nan)
     ans  =
      T

    --> // Projection à travers une dimension / selon une direction :
    --> A = rand(2,5)<0.3
     A  =
      T F F F F
      F F T F F

    --> or(A)
     ans  =
      T

    --> or(A, "r")   // or(A, 1) est équivalent
     ans  =
      T F T F F

    --> or(A, "c")   // or(A, 2) est équivalent
     ans  =
      T
      T

    --> // Utilisation entre entiers encodés :
    --> A = int16(grand(3,5,"uin",-10,10));
    --> A(abs(A)<8) = 0
     A  =
      0  0  0 -9  0
      0 10  0  0  0
      0  0  0  0  9

    --> or(A)
     ans  =
      T

    --> or(A,1)
     ans  =
      F T F T T

    --> // Avec une hypermatrice de nombres décimaux :
    --> A = rand(3,4,2);
    --> A(A<0.7) = 0
     A  =
    (:,:,1)
       0.   0.       0.   0.
       0.   0.7065   0.   0.7227
       0.   0.       0.   0.8977
    (:,:,2)
       0.       0.   0.       0.7901
       0.       0.   0.       0.9809
       0.9677   0.   0.7795   0.8187

    --> or(A,3)
     ans  =
      F F F T
      F T F T
      T F T T

    --> // Avec une matrice encodée creuse :
    --> A = sprand(70,100, 0.001)
     A  =
    (  70,  100) sparse matrix

    (  18,  53)   0.7943
    (  23,  96)   0.4361
    (  38,  34)   0.9275
    (  56,   1)   0.1622
    (  69,  98)   0.3112

    --> or(A, "r")
     ans  =
    (  1,  100) sparse matrix

    (  1,   1)  T
    (  1,  34)  T
    (  1,  53)  T
    (  1,  96)  T
    (  1,  98)  T

    --> or(A, "c")
     ans  =
    (  70,  1) sparse matrix

    (  18,  1)  T
    (  23,  1)  T
    (  38,  1)  T
    (  56,  1)  T
    (  69,  1)  T

## Voir aussi

- | (distributif)
- and
- ~ not