Wenn Sie nachfragen numpy.logical_or
, dann nein, wie in den Dokumenten ausdrücklich angegeben, sind die einzigen Parameter x1, x2
und optional out
:
numpy.
logical_or
( x1, x2[, out]
) =<ufunc 'logical_or'>
Sie können natürlich mehrere logical_or
Anrufe wie folgt verketten:
>>> 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)
Die Art und Weise, diese Art der Verkettung in NumPy zu verallgemeinern, ist mit reduce
:
>>> np.logical_or.reduce((x, y, z))
array([ True, True, True, False], dtype=bool)
Und natürlich wird dies auch arbeiten , wenn Sie ein mehrdimensionales Array statt separater Arrays in der Tat, das ist , wie es gemeint verwendet werden:
>>> 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)
Ein Tupel aus drei 1D-Arrays gleicher Länge ist jedoch in NumPy-Begriffen array_like und kann als 2D-Array verwendet werden.
Außerhalb von NumPy können Sie auch Pythons verwenden reduce
:
>>> functools.reduce(np.logical_or, (x, y, z))
array([ True, True, True, False], dtype=bool)
Im Gegensatz zu NumPy's reduce
wird Python jedoch nicht oft benötigt. In den meisten Fällen gibt es eine einfachere Möglichkeit, Dinge zu tun - z. B. mehrere Python- or
Operatoren miteinander zu verketten , nicht zu reduce
Ende zu gehen operator.or_
, sondern nur zu verwenden any
. Und wenn dies nicht der Fall ist , ist es normalerweise besser lesbar, eine explizite Schleife zu verwenden.
Tatsächlich kann NumPy's any
auch für diesen Fall verwendet werden, obwohl es nicht ganz so trivial ist. Wenn Sie ihm keine Achse explizit zuweisen, erhalten Sie einen Skalar anstelle eines Arrays. Damit:
>>> np.any((x, y, z), axis=0)
array([ True, True, True, False], dtype=bool)
Wie zu erwarten ist, logical_and
ist es ähnlich - Sie können es verketten, np.reduce
es, functools.reduce
es oder all
durch ein explizites ersetzen axis
.
Was ist mit anderen Operationen logical_xor
? Wieder das gleiche Geschäft ... außer dass in diesem Fall keine all
/ any
-Typ-Funktion gilt. (Wie würdest du es nennen odd
?)
any()
?