Numpy のlogical_or
関数は、比較に 2 つ以上の配列を必要としません。 3 つ以上の配列の結合を見つけるにはどうすればよいですか? (Numpy に関してもlogical_and
、3 つ以上の配列の交差を取得する場合も同じ質問ができます。)
ベストアンサー1
もしあなたが尋ねているのがnumpy.logical_or
の場合、いいえ、ドキュメントに明示的に記載されているように、パラメータはx1, x2
と、オプションで のみですout
。
numpy.
logical_or
(x1, x2[, out]
) =<ufunc 'logical_or'>
もちろん、logical_or
次のように複数の呼び出しを連鎖させることもできます。
>>> 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)
NumPyでこのような連鎖を一般化する方法は、reduce
:
>>> np.logical_or.reduce((x, y, z))
array([ True, True, True, False], dtype=bool)
もちろん、これは別々の配列ではなく1つの多次元配列でも機能します。実際、それが意味使用するもの:
>>> 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)
しかし、同じ長さの1次元配列3つのタプルは配列のようなNumPy 用語では、2D 配列として使用できます。
NumPy 以外では、Python の も使用できますreduce
。
>>> functools.reduce(np.logical_or, (x, y, z))
array([ True, True, True, False], dtype=bool)
しかし、NumPyの とは異なりreduce
、Pythonの は頻繁に必要になるわけではありません。ほとんどの場合、より簡単な方法があります。たとえば、複数のPythonor
演算子を連結するには、 を使わずreduce
をoperator.or_
使用しますany
。ない通常は明示的なループを使用する方が読みやすくなります。
そして実際NumPyのany
この場合にも使用できますが、それほど簡単ではありません。軸を明示的に指定しないと、配列ではなくスカラーになります。つまり、
>>> np.any((x, y, z), axis=0)
array([ True, True, True, False], dtype=bool)
ご想像のとおり、logical_and
類似しています。連鎖したりnp.reduce
、functools.reduce
置き換えたりすることができますall
明示的な を使用しますaxis
。
他の操作はどうでしょうか?logical_xor
all
? もう一度、同じ処理を行います…ただし、この場合は適用される/タイプの関数はありませんany
。(何と呼びますか? odd
?)