Як виправити: runtimewarning: у 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
n.p. 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
n.p. exp (logsumexp(-3*array1) - logsumexp(-3*array2))

2.7071782767869983e+195

Зауважте, що результат надзвичайно великий, але ми не отримуємо жодних помилок, оскільки ми використали спеціальну математичну функцію з бібліотеки SciPy, призначену для обробки таких типів чисел.

У багатьох випадках варто шукати спеціальні функції в бібліотеці SciPy , які можуть обробляти екстремальні математичні операції, оскільки ці функції спеціально розроблені для наукових обчислень.

Примітка . Ви можете знайти повну онлайн-документацію для функції logsumexp() тут .

Додаткові ресурси

У наступних посібниках пояснюється, як виправити інші типові помилки в Python:

Як виправити KeyError у Pandas
Як виправити: ValueError: неможливо перетворити float NaN на int
Як виправити: ValueError: операнди не можна транслювати з фігурами

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *