Як виправити: у true_divide виявлено недійсне значення


Під час використання NumPy ви можете зустріти одне попередження:

 RuntimeWarning : invalid value encountered in true_divide

Це попередження виникає, коли ви намагаєтеся поділити на недійсне значення (наприклад, NaN, Inf тощо) у масиві NumPy.

Слід зазначити, що це лише попередження , і NumPy просто поверне значення nan при спробі поділити на недійсне значення.

У наступному прикладі показано, як на практиці реагувати на це попередження.

Як відтворити помилку

Припустимо, ми намагаємося розділити значення одного масиву NumPy на значення іншого масиву NumPy:

 import numpy as np

#define NumPy arrays
x = np. array ([4, 5, 5, 7, 0])
y = np. array ([2, 4, 6, 7, 0])

#divide the values in x by the values in y
n.p. divide (x,y)

array([2., 1.25, 0.8333, 1., no])

RuntimeWarning : invalid value encountered in true_divide

Зверніть увагу, що NumPy ділить кожне значення x на відповідне значення y, але створюється RuntimeWarning .

Це тому, що остання виконана операція ділення була поділена на нуль, що призвело до значення nan .

Як реагувати на це попередження

Як згадувалося раніше, це RuntimeWarning є лише попередженням і не перешкоджає виконанню коду.

Однак, якщо ви хочете придушити цей тип попередження, ви можете використовувати такий синтаксис:

 n.p. seterr (invalid=' ignore ')

Це повідомляє NumPy приховати будь-які попередження, які містять «недійсне» повідомлення.

Отже, якщо ми запустимо код знову, ми не отримаємо жодних попереджень:

 import numpy as np

#define NumPy arrays
x = np. array ([4, 5, 5, 7, 0])
y = np. array ([2, 4, 6, 7, 0])

#divide the values in x by the values in y
n.p. divide (x,y)

array([2., 1.25, 0.8333, 1., no])

Значення nan все ще повертається для останнього значення виводу, але цього разу попередження не відображається.

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

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

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

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

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