Как исправить: предупреждение во время выполнения: недопустимое значение в double_scalars


Одна ошибка, с которой вы можете столкнуться в Python:

runtimewarning: invalid value encountered in double_scalars

Эта ошибка возникает, когда вы пытаетесь выполнить какую-либо математическую операцию, включающую очень маленькие или очень большие числа, и в результате Python просто выводит значение NaN.

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, мы пытаемся выполнить следующую математическую операцию с двумя массивами NumPy:

import numpy as np

#define two NumPy arrays
array1 = np.array([[1100, 1050]])
array2 = np.array([[1200, 4000]])

#perform complex mathematical operation
np.exp (-3\*array1). sum () / np.exp (-3\*array2). sum ()

RuntimeWarning: invalid value encountered in double_scalars

Мы получаем RuntimeWarning , потому что результат в знаменателе крайне близок к нулю.

Это означает, что ответ на проблему деления будет очень большим, и Python не сможет справиться с таким большим значением.

Как исправить ошибку

Обычно способ исправить ошибку такого типа — использовать специальную функцию из другой библиотеки Python, которая способна обрабатывать очень маленькие или очень большие значения в вычислениях.

В этом случае мы можем использовать функцию logsumexp() из библиотеки SciPy:

import numpy as np
from scipy. special import logsumexp

#define two NumPy arrays
array1 = np.array([[1100, 1050]])
array2 = np.array([[1200, 4000]])

#perform complex mathematical operation
np.exp (logsumexp(-3\*array1) - logsumexp(-3\*array2))

2.7071782767869983e+195

Обратите внимание, что результат очень большой, но мы не получаем никакой ошибки, потому что мы использовали специальную математическую функцию из библиотеки SciPy, которая была разработана для обработки этих типов чисел.

Во многих случаях стоит поискать в библиотеке SciPy специальные функции, которые могут выполнять экстремальные математические операции, поскольку эти функции разработаны специально для научных вычислений.

Примечание.Полную онлайн-документацию по функции logsumexp() можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в целое число
Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.