RuntimeWarning: деление на ноль, встречающееся в журнале
Я использую numpy.log10 для вычисления журнала массива значений вероятности. В массиве есть некоторые нули, и я пытаюсь обойти это, используя
result = numpy.where(prob > 0.0000000001, numpy.log10(prob), -10)
Однако RuntimeWarning: divide by zero encountered in log10
все еще появился, и я уверен, что именно эта строка вызвала предупреждение.
Хотя моя проблема решена, я смущен, почему это предупреждение появилось снова и снова?
Ответы
Ответ 1
numpy.log10(prob)
вычисляет логарифм базы 10 для всех элементов prob
, даже те, которые не выбраны where
. Если вы хотите, вы можете заполнить нули prob
10**-10
или некоторое фиктивное значение, прежде чем брать логарифм, чтобы избавиться от проблемы. (Убедитесь, что вы не вычисляете prob > 0.0000000001
с фиктивными значениями.)
Ответ 2
Я решил это, найдя самое низкое ненулевое число в массиве и заменив все нули на число ниже самого низкого: p
Результат в коде, который будет выглядеть следующим образом:
def replaceZeroes(data):
min_nonzero = np.min(data[np.nonzero(data)])
data[data == 0] = min_nonzero
return data
...
prob = replaceZeroes(prob)
result = numpy.where(prob > 0.0000000001, numpy.log10(prob), -10)
Обратите внимание, что все числа добавляют к ним небольшую часть.