Si vous posez des questions numpy.logical_or
, alors non, comme le disent explicitement la documentation, les seuls paramètres sont x1, x2
, et éventuellement out
:
numpy.
logical_or
( x1, x2[, out]
) =<ufunc 'logical_or'>
Vous pouvez bien sûr enchaîner plusieurs logical_or
appels comme ceci:
>>> x = np.array([True, True, False, False])
>>> y = np.array([True, False, True, False])
>>> z = np.array([False, False, False, False])
>>> np.logical_or(np.logical_or(x, y), z)
array([ True, True, True, False], dtype=bool)
La façon de généraliser ce type de chaînage dans NumPy est avec reduce
:
>>> np.logical_or.reduce((x, y, z))
array([ True, True, True, False], dtype=bool)
Et bien sûr, cela fonctionnera également si vous avez un tableau multidimensionnel au lieu de tableaux séparés - en fait, c'est ainsi qu'il est censé être utilisé:
>>> xyz = np.array((x, y, z))
>>> xyz
array([[ True, True, False, False],
[ True, False, True, False],
[False, False, False, False]], dtype=bool)
>>> np.logical_or.reduce(xyz)
array([ True, True, True, False], dtype=bool)
Mais un tuple de trois tableaux 1D de même longueur est un array_like en termes NumPy, et peut être utilisé comme un tableau 2D.
En dehors de NumPy, vous pouvez également utiliser Python reduce
:
>>> functools.reduce(np.logical_or, (x, y, z))
array([ True, True, True, False], dtype=bool)
Cependant, contrairement à NumPy reduce
, Python n'est pas souvent nécessaire. Dans la plupart des cas, il existe un moyen plus simple de faire les choses - par exemple, pour enchaîner plusieurs or
opérateurs Python , ne pas reduce
terminer operator.or_
, utilisez simplement any
. Et quand il n'y en a pas , il est généralement plus lisible d'utiliser une boucle explicite.
Et en fait, NumPy's any
peut également être utilisé dans ce cas, bien que ce ne soit pas aussi trivial; si vous ne lui donnez pas explicitement un axe, vous vous retrouverez avec un scalaire au lieu d'un tableau. Donc:
>>> np.any((x, y, z), axis=0)
array([ True, True, True, False], dtype=bool)
Comme vous pouvez vous y attendre, logical_and
c'est similaire - vous pouvez l'enchaîner, np.reduce
le, functools.reduce
le, ou le remplacer all
par un explicite axis
.
Qu'en est-il des autres opérations, comme logical_xor
? Encore une fois, même accord… sauf que dans ce cas, il n'y a pas de fonction all
/ any
-type qui s'applique. (Comment appelleriez-vous cela odd
??)
any()
?