Каковы все возможные расчеты, которые могут вызвать NaN в Python?

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

Каковы наиболее распространенные операции, которые могут вызвать NaN в Python, которые возникают при работе с NumPy или SciPy?

One Solution collect form web for “Каковы все возможные расчеты, которые могут вызвать NaN в Python?”

Если вы выполняете любое из следующих действий без обхода среды с плавающей точкой, вы должны получить NaN, где у вас его не было:

  • 0/0 (либо знак сверху и снизу)
  • inf/inf (либо знак сверху и снизу)
  • inf - inf или (-inf) + inf или inf + (-inf) или (-inf) - (-inf)
  • 0 * inf и inf * 0 (либо знак на обоих факторах)
  • sqrt(x) когда x < 0
  • fmod(x, y) когда y = 0 или x бесконечно; здесь fmod является остатком с плавающей запятой.

Каноническая ссылка для этих аспектов машинной арифметики – это спецификация IEEE 754 . В разделе 7.1 описано исключение недействительной операции, которое возникает, когда вы собираетесь получить NaN. «Исключение» в IEEE 754 означает нечто иное, чем в контексте языка программирования.

Многие реализации специальных функций документируют свое поведение в особенностях функции, которую они пытаются реализовать. Например, смотрите страницу man atan2 и log .

Вы спрашиваете конкретно о NumPy и SciPy. Я не уверен, просто ли это сказать: «Я спрашиваю об арифметике машины, которая происходит под капотом в NumPy» или «Я спрашиваю о eig() и т. Д.». Я предполагаю, что первый, но остальная часть этого ответа пытается смутно подключиться к функциям более высокого уровня в NumPy. Основное правило: если реализация функции совершает один из вышеуказанных грехов, вы получаете NaN.

Например, для 1e1010 вы можете получить NaN s, если ваши входные значения составляют около 1e1010 или больше и тихая потеря точности, если ваши входные значения составляют около 1e-1010 или меньше. Тем не менее, помимо действительно смехотворно масштабируемых входов, вы совершенно безопасны с fft .

Для вещей, связанных с матричной математикой, NaN могут возникать (как правило, через inf - inf маршрут), если ваши цифры огромны или ваша матрица крайне плохо обусловлена. Полное обсуждение того, как вы можете ввернуться в числовую линейную алгебру, слишком долго, чтобы принадлежать в ответ. Я предлагаю перечислить числовую книгу линейной алгебры (Trefethen и Bau популярен) в течение нескольких месяцев.

Одна вещь, которую я нашел полезной при написании и отладке кода, который «не должен» генерировать NaN, заключается в том, чтобы сказать, что машина ловутся, если происходит NaN. В GNU C я делаю следующее:

 #include <fenv.h> feenableexcept(FE_INVALID); 
  • h5py: Правильный способ нарезки массивов массивов
  • Визуализация 3D-numpy-массива кадр за кадром
  • Каким образом данные хранятся в * .npy?
  • Проблемы с теплоизоляцией Pyplot 1D
  • Чтение / запись списка Python из / в двоичный файл
  • Сортировка данных массива по общей дате
  • Разница между numpy dot () и умножением матрицы Python 3.5+ @
  • Каковы последствия вызова функций API API NumPy из нескольких потоков?
  •  
    Interesting Posts for Van-Lav

    Как найти элемент, содержащий определенный текст в Selenium Webdriver (Python)?

    Почему синтаксис «mutable default fix fix» настолько уродлив, спрашивает новичок python

    Установка numpy для Windows 10: не удалось импортировать модуль расширения numarray numpy

    Как работает add_static_view Pyramid?

    Определение стохастических и детерминированных переменных с помощью pymc3

    Категоризация списка массива в python

    Как обнаружить и отремонтировать поврежденный раздел CDATA в файле XML?

    Python selenium browser driver.back ()

    tile для создания csr_matrix из одной строки другой csr_matrix

    Создание нулевого заполненного кадра данных панд

    Panda's get_dummies против OneHotEncoder от Sklearn () :: Что более эффективно?

    Запуск кода pyspark в Intellij

    Быстрый метод для поиска строки в большом текстовом файле с помощью python

    Множественная разбивка на страницы (ajax) не работает для django-el-pagination

    Проблема дешифрования PGP в python с помощью pyme без взаимодействия с пользователем

    Python - лучший язык программирования в мире.