2016-10-28 2 views
0

Я работаю с очень маленькими значениями p (несколько сотен десятичных знаков), и я пытаюсь обнаружить самый маленький из них. Похоже, что Python обнаруживает многие из них как ноль, поэтому при регистрации я получаю ошибку с нулевым делением.Python - Избегайте ошибок с нулевым делением при записи очень малых значений (несколько сотен десятичных знаков)

Чтобы избежать этого, я написал этот код:

smallest_val = min(np.array(p_value)[np.array(p_value) > 0]) 
for i in range(len(p_value)): 
    if p_value[i] == 0: 
    p_value[i] = smallest_val 

p_value_log = [] 
for i in p_value: 
    b = log(i) 
    p_value_log.append(b) 

Конечно, это не решает мою проблему в виде нескольких небольших р-значения тогда равны smallest_val и я не могу определить самых маленьких. Любая идея о том, как лучше всего это сделать?

+0

Не можете ли вы поймать исключение и обеспечить квазиинтенсивное значение, когда это произойдет? –

+0

Я могу поймать исключения, но как я могу обеспечить квази-бесконечное значение? Извините, если это звучит как основной вопрос, я новичок в Python. – CenCG

ответ

0

Вместо того чтобы заменить 0 с smallest_val, замените их smallest_val/2 или что-то еще между smallest_val и 0, так что вы можете определить ваши замены.

+0

Проблема в том, что smallest_val уже находится на пределе того, что Python примет как ненулевое, поэтому, если я делю его на 2, python по-прежнему считает, что значение равно нулю – CenCG

+0

Откуда ты это знаешь? Ваш код находит наименьшее значение не-0 в массиве, а не (обязательно) наименьшее значение, отличное от 0. –

+0

Потому что, когда я использую тот же код для другого набора данных, который отличается от набора, который я сравниваю с ним, мне удается отобразить все значения p, а наименьшее - уже несколько сотен десятичных знаков. – CenCG

Смежные вопросы