リストとNumPy配列のブール演算とビット演算の動作の違いを説明するものは何ですか?
次の例に示すように、Python で&
vs and
を適切に使用する方法について混乱しています。
mylist1 = [True, True, True, False, True]
mylist2 = [False, True, False, True, False]
>>> len(mylist1) == len(mylist2)
True
# ---- Example 1 ----
>>> mylist1 and mylist2
[False, True, False, True, False]
# I would have expected [False, True, False, False, False]
# ---- Example 2 ----
>>> mylist1 & mylist2
TypeError: unsupported operand type(s) for &: 'list' and 'list'
# Why not just like example 1?
>>> import numpy as np
# ---- Example 3 ----
>>> np.array(mylist1) and np.array(mylist2)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
# Why not just like Example 4?
# ---- Example 4 ----
>>> np.array(mylist1) & np.array(mylist2)
array([False, True, False, False, False], dtype=bool)
# This is the output I was expecting!
この回答とこの答えは私がそれを理解する助けand
ブーリアン演算であるが、&
ビット演算です。
概念をよりよく理解するためにビット演算について読みましたが、上記の4つの例を理解するためにその情報を使用するのに苦労しています。
例4では、希望する出力が得られたので問題ありませんが、and
vs をいつ、どのように、なぜ使用する必要があるかについてはまだ混乱してい&
ます。リストとNumPy配列がこれらの演算子で異なる動作をするのはなぜですか?
ブール演算とビット演算の違いを理解して、リストとNumPy配列を異なる方法で処理する理由を説明できる人はいますか?
mylist1 and mylist2
、と同じ結果を出力しませんmylist2 and mylist1
。
np.bitwise_and()
andnp.logical_and()
と友達がいます。