Ответ 1
Он выглядит как ошибка вычисления с плавающей запятой. Проверьте numpy.seterr, чтобы получить дополнительную информацию о том, где это происходит.
Когда я запускаю свой код, я получаю эти предупреждения, всегда в группах по четыре, спорадически. Я попытался найти источник, разместив сообщения отладки до и после определенных операторов, чтобы указать его начало.
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Является ли это предупреждением Numpy и что такое двойной скаляр?
Из Numpy я использую
min(), argmin(), mean() and random.randn()
Я также использую Matplotlib
Он выглядит как ошибка вычисления с плавающей запятой. Проверьте numpy.seterr, чтобы получить дополнительную информацию о том, где это происходит.
В моем случае я обнаружил, что это деление на ноль.
Иногда NaNs или нулевые значения в данных генерируют эту ошибку с помощью Numpy. Если вы глотаете данные, скажем, CSV файл или что-то в этом роде, а затем работаете с данными с помощью массивов numpy, проблема может возникнуть из-за ваших данных. Вы можете попробовать подать код небольшому набору данных с известными значениями и посмотреть, получится ли у вас тот же результат.
Массив нулевого размера, переданный в numpy.mean
, вызывает это предупреждение (как указано в нескольких комментариях).
Для некоторых других кандидатов:
median
также вызывает это предупреждение в массиве нулевого размера.другие кандидаты не поднимают это предупреждение:
min,argmin
оба повышают ValueError
в пустом массивеrandn
принимает *arg
; используя randn(*[])
возвращает одно случайное числоstd,var
return nan
в пустом массивеЯ столкнулся с аналогичной проблемой - недопустимое значение, встречающееся в... После много времени, пытаясь выяснить, что вызывает эту ошибку, я верю в мой случай, это было связано с NaN в моем фреймворке. Проверьте работу с отсутствующими данными в pandas.
Нет == Нет True
np.nan == np.nan False
Когда NaN не равно NaN, тогда арифметические операции, такие как деление и умножение, заставляют его выкидывать эту ошибку.
Несколько вещей, которые вы можете сделать, чтобы избежать этой проблемы:
Используйте pd.set_option, чтобы задать число десятичных чисел для рассмотрения в вашем анализе, так что бесконечно малый номер не вызывает подобную проблему - ('display.float_format', lambda x: '%.3f'% x).
Используйте df.round() для округления чисел, поэтому Panda отбрасывает оставшиеся цифры из анализа. И самое главное,
Установите NaN на ноль df = df.fillna(0). Будьте осторожны, если заполнение NaN нулем не относится к вашим наборам данных, потому что это будет относить запись к нулю, так что N в среднем, std и т.д. Также изменяется.
Всякий раз, когда вы работаете с импортом CSV, попробуйте использовать df.dropna(), чтобы избежать всех таких предупреждений или ошибок.
Я приписываю это, пока вычисляю np.var(np.array([]))
. np.var
разделит размер массива, который в этом случае равен нулю.