Одно предупреждение, с которым вы можете столкнуться при использовании 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*
np.divide (x, y)
array([2. , 1.25 , 0.8333, 1. , nan])
RuntimeWarning : invalid value encountered in true_divide
Обратите внимание, что NumPy делит каждое значение x на соответствующее значение y, но генерируется RuntimeWarning .
Это связано с тем, что последней выполненной операцией деления было деление нуля на ноль, что привело к значению nan .
Как устранить это предупреждение
Как упоминалось ранее, это RuntimeWarning является только предупреждением и не препятствует запуску кода.
Однако, если вы хотите подавить этот тип предупреждения, вы можете использовать следующий синтаксис:
np.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*
np.divide (x, y)
array([2. , 1.25 , 0.8333, 1. , nan])
Значение nan по-прежнему возвращается для последнего значения в выводе, но на этот раз предупреждающее сообщение не отображается.
Дополнительные ресурсы
В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:
Как исправить KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в целое число
Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами