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_orappels 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 oropérateurs Python , ne pas reduceterminer 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 anypeut é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_andc'est similaire - vous pouvez l'enchaîner, np.reducele, functools.reducele, ou le remplacer allpar 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()?