In [1]:
import numpy as np

In [2]:
print(np.__version__)


1.17.3

In [3]:
a_bool = np.array([True, True, True])
b_bool = np.array([True, False, False])

In [4]:
# if a_bool:
#     pass
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

In [5]:
# a_bool and b_bool
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

In [6]:
# a_bool or b_bool
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

In [7]:
# not b_bool
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

In [8]:
print(bool([0, 1, 2]))


True

In [9]:
print(bool([]))


False

In [10]:
print(not [0, 1, 2])


False

In [11]:
print(not [])


True

In [12]:
# bool(a_bool)
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

In [13]:
print(a_bool.all())


True

In [14]:
print(a_bool.any())


True

In [15]:
print(b_bool.all())


False

In [16]:
print(b_bool.any())


True

In [17]:
a_bool_2d = np.array([[True, True, True], [True, False, False]])
print(a_bool_2d)


[[ True  True  True]
 [ True False False]]

In [18]:
print(a_bool_2d.all())


False

In [19]:
print(a_bool_2d.all(axis=0))


[ True False False]

In [20]:
print(a_bool_2d.all(axis=1))


[ True False]

In [21]:
print(type(a_bool_2d.all(axis=0)))


<class 'numpy.ndarray'>

In [22]:
print(a_bool.size)


3

In [23]:
print(a_bool.size == 0)


False

In [24]:
print(a_bool & b_bool)


[ True False False]

In [25]:
print(a_bool | b_bool)


[ True  True  True]

In [26]:
print(~b_bool)


[False  True  True]

In [27]:
print(a_bool ^ b_bool)


[False  True  True]

In [28]:
a_int = np.array([0, 1, 3])  # [0b00 0b01 0b11]
b_int = np.array([1, 0, 2])  # [0b01 0b00 0b10]

In [29]:
print(a_int & b_int)


[0 0 2]

In [30]:
print(a_int | b_int)


[1 1 3]

In [31]:
print(a_int ^ b_int)


[1 1 1]

In [32]:
print(~a_int)


[-1 -2 -4]

In [33]:
a = np.arange(12).reshape(3, 4)
print(a)


[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

In [34]:
print(a > 3)


[[False False False False]
 [ True  True  True  True]
 [ True  True  True  True]]

In [35]:
print(a % 2 == 0)


[[ True False  True False]
 [ True False  True False]
 [ True False  True False]]

In [36]:
# print(a > 3 & a % 2 == 0)
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

In [37]:
# print(a > (3 & (a % 2)) == 0)
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

In [38]:
print((a > 3) & (a % 2 == 0))


[[False False False False]
 [ True False  True False]
 [ True False  True False]]

In [39]:
x = 10

In [40]:
print(x > 3)


True

In [41]:
print(x % 2 == 1)


False

In [42]:
print(x > 3 or x % 2 == 1)


True

In [43]:
print((x > 3) or (x % 2 == 1))


True

In [44]:
a_single = np.array([0])
b_single = np.array([1])
c_single = np.array([2])

In [45]:
print(bool(a_single))


False

In [46]:
print(bool(b_single))


True

In [47]:
print(bool(c_single))


True

In [48]:
print(b_single and c_single)


[2]

In [49]:
print(c_single and b_single)


[1]

In [50]:
print(b_single or c_single)


[1]

In [51]:
print(c_single or b_single)


[2]

In [52]:
print(b_single & c_single)


[0]

In [53]:
print(b_single | c_single)


[3]

In [54]:
print(not a_single)


True

In [55]:
print(not b_single)


False

In [56]:
print(not c_single)


False

In [57]:
print(~a_single)


[-1]

In [58]:
print(~b_single)


[-2]

In [59]:
print(~c_single)


[-3]

In [60]:
a_empty = np.array([])
print(a_empty)


[]

In [61]:
print(bool(a_empty))


False
/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:1: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.
  """Entry point for launching an IPython kernel.