np.any
and np.all
don't work on generators. They need sequences. When given a non-sequence, they treat this as any other object and call bool
on it (or do something equivalent), which will return True
:
>>> false = [False]
>>> np.array(x for x in false)
array(<generator object <genexpr> at 0x31193c0>, dtype=object)
>>> bool(x for x in false)
True
List comprehensions work, though:
>>> np.all([x for x in false])
False
>>> np.any([x for x in false])
False
I advise using Python's built-in any
and all
when generators are expected, since they are typically faster than using NumPy and list comprehensions (because of a double conversion, first to list
, then to array
).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…