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