У меня есть выражение, которое переполняется для определенных значений параметров. В этом случае я вычислил, каким должен быть асимптотический результат, используя ручку и бумагу, и когда у меня есть такой случай, я просто заменяю его аналитическим выражением.
В данный момент мой код работает примерно так:
values = ExpressionThatOverFlows()
# Check the ones that overflow
indOverFlow = isnan(values)
# Set them to the values I derived by pen and paper
values[indOverFlow] = derivedValues
Моя проблема в том, что ввод / вывод взрывается с «предупреждениями». Я знаю, что это хорошо, что это предупреждает меня, но я явно позаботился об этом, поэтому я хочу заставить их замолчать. Обратите внимание, что я не хочу отключать все типы предупреждений о «переполнении», только те, которые приведены здесь. Я думал, что что-то вроде этого будет работать, но это не так:
try:
values = ExpressionThatOverFlows()
except Warning:
pass
# and the rest of the code as it is
Я проверил, но, похоже, я просто нашел способ заставить замолчать эти предупреждения на весь сеанс или навсегда, но это, как я уже говорил, не то, что я хочу.
Спасибо за вашу помощь, высоко ценится.
РЕДАКТИРОВАТЬ: Вот код гораздо меньше, который генерирует мою проблему:
from scipy import log1p, exp
from numpy import array, isnan
a = array([0.2222, 500.3, 0.3, 700.8, 0.111])
values = log1p(-exp(-exp(10**a - 9**a)))
print values # Note the nan's
indOverflow = isnan(values)
values[indOverflow] = 0
Обратите внимание, как я исправляю проблему «вручную» в конце, но в I / O происходит следующее:
Warning: overflow encountered in power
Warning: overflow encountered in power
Warning: invalid value encountered in subtract
Я выполняю такого рода вычисления в цикле, поэтому я хочу заставить замолчать эти сообщения (поскольку они уже исправлены и, кроме того, для их печати требуется много времени)