Como corrigir: valor inválido encontrado em true_divide


Um aviso que você pode encontrar ao usar o NumPy é:

 RuntimeWarning : invalid value encountered in true_divide

Este aviso ocorre quando você tenta dividir por um valor inválido (como NaN, Inf, etc.) em uma matriz NumPy.

Deve-se observar que este é apenas um aviso e o NumPy simplesmente retornará um valor nan ao tentar dividir por um valor inválido.

O exemplo a seguir mostra como responder a esse aviso na prática.

Como reproduzir o erro

Suponha que estejamos tentando dividir os valores de um array NumPy pelos valores de outro array 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

Observe que NumPy divide cada valor de x pelo valor correspondente de y, mas um RuntimeWarning é produzido.

Isso ocorre porque a última operação de divisão realizada foi zero dividido por zero, o que resultou em um valor nan .

Como responder a este aviso

Conforme mencionado antes, este RuntimeWarning é apenas um aviso e não impede a execução do código.

Porém, se quiser suprimir esse tipo de aviso, você pode usar a seguinte sintaxe:

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

Isso diz ao NumPy para ocultar quaisquer avisos que contenham uma mensagem “inválida”.

Portanto, se executarmos o código novamente, não receberemos nenhum aviso:

 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])

Um valor nan ainda é retornado para o último valor da saída, mas nenhuma mensagem de aviso é exibida desta vez.

Recursos adicionais

Os tutoriais a seguir explicam como corrigir outros erros comuns em Python:

Como corrigir KeyError em Pandas
Como corrigir: ValueError: não é possível converter float NaN em int
Como corrigir: ValueError: os operandos não puderam ser transmitidos com formas

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *