如何解释列表与 NumPy 数组上布尔运算和按位运算的行为差异?
我对正确使用感到困惑&
vs and
在 Python 中,如以下示例所示。
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 这个答案帮助我理解了这一点and是一个布尔运算,但是是按位运算。
我读到按位运算为了更好地理解这个概念,但我正在努力使用这些信息来理解我上面的 4 个例子。
示例 4 引导我得到了我想要的输出,所以这很好,但我仍然对何时/如何/为什么应该使用感到困惑and
vs &
。为什么列表和 NumPy 数组在使用这些运算符时表现不同?
谁能帮助我理解布尔运算和按位运算之间的区别,以解释为什么它们以不同的方式处理列表和 NumPy 数组?