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)

Обратите внимание, что все числа добавляют к ним небольшую часть.