Як виправити: 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: операнди не можна транслювати з фігурами