'недопустимое значение, обнаруженное в предупреждении double scalars', возможно numpy

когда я запускаю свой код, я получаю эти предупреждения, всегда в группах по четыре, спорадически. Я попытался найти источник, разместив сообщения отладки до и после определенных операторов, чтобы указать его происхождение.

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

5 ответов


похоже на ошибку вычисления с плавающей запятой. Проверьте и NumPy.seterr функция для получения дополнительной информации о том, где это происходит.


в моем случае я узнал, что это деление на ноль.


иногда NaNs или null значения в данных будут генерировать эту ошибку с Numpy. Если вы глотаете данные из, скажем, CSV-файла или что-то в этом роде, а затем работаете с данными с помощью массивов numpy, проблема могла возникнуть с вашим глотанием данных. Вы можете попробовать ввести в свой код небольшой набор данных с известными значениями и посмотреть, получите ли вы тот же результат.


массив нулевого размера передан numpy.mean вызывает это предупреждение (как указано в нескольких комментариях).

для некоторых других кандидатов:

  • median также вызывает это предупреждение для массива нулевого размера.

другие кандидаты не поднимают это предупреждение:

  • min,argmin Как поднять ValueError на пустой массив
  • randn принимает *arg; через randn(*[]) возвращает одно случайное число
  • std,var возвращение nan на пустом массиве

Я столкнулся с аналогичной проблемой-недопустимое значение встречается В... Потратив много времени, пытаясь выяснить, что вызывает эту ошибку, я считаю, что в моем случае это было связано с NaN в моем фрейме данных. Проверьте работу с отсутствующими данными в pandas.

Нет == Нет Правда

np.nan == np.бабушка Ложные

когда NaN не равен NaN, то арифметические операции, такие как деление и умножение, вызывают эту ошибку.

пару вещей вы можете сделать, чтобы избежать этой проблемы:

  1. использовать pd.set_option для установки десятичного числа для рассмотрения в вашем анализе, чтобы число infinitesmall не вызывало аналогичную проблему - ('display.float_format', lambda x:'%.3f ' % x).

  2. использовать df.round() для округления чисел, чтобы Panda отбрасывала оставшиеся цифры из анализа. И самое главное,

  3. установить NaN в ноль df=df.fillna(0). Будьте осторожны при заполнении NaN нулем не применяется к вашим наборам данных, потому что это будет рассматривать запись как ноль, поэтому N в среднем, std и т. д. также изменяется.