NaN
или nan
, в любом случае, равно нулю. Это означает, что там нет данных.
Согласно этому посту ,
Основная причина использования NaN (больше None) заключается в том, что он может храниться с dumpy float64 dtype, а не с менее эффективным dtype
.
Как видите, None
, np.nan
и 0
ведут себя немного по-разному.
print(any(np.array([1, None]))) # True
print(all(np.array([1, None]))) # False
print(any(np.array([1, np.nan]))) # True
print(all(np.array([1, np.nan]))) # True
print(any(np.array([1, 0]))) # True
print(all(np.array([1, 0]))) # False
Мы видим, что np.nan
по некоторым причинам всегда оценивается в True
.
Согласно этой записи , и Python, и Numpy оценивают нулевые значения как True
.
Так что, если в примере было действительно нулевое значение, оно было бы оценено как истинное. Я думаю, что целью упражнения было показать использование функции any()
и отрицание с помощью ~
. Я согласен, название немного сбито с толку, и он на самом деле пытается найти False
значений, а не нулевые. Это также может быть реализовано в том, что np.random.randint(0,3,(3,10))
будет только когда-либо возвращать массив, заполненный значениями 0
, 1
или 2
и никогда False
или np.nan
.