This seems surprising to me:
import numpy as np
assert np.ndarray([0]).all()
assert not np.array([0]).all()
What is going on here?
CodePudding user response:
Consider what those two calls produce:
>>> np.ndarray([0])
array([], dtype=float64)
This is an empty 1-D array, because you specified a single dimension of length 0.
>>> np.array([0])
array([0])
This is a 1-D array containing a single element, 0.
The definition of all() isn't just "all elements are True", it's also "no elements are False", as seen here:
>>> np.array([]).all()
True
So:
np.ndarray([0]).all()
is True because it's an empty array, while:
np.array([0]).all()
is False because it's an array of one non-True element.
