2 votes

RuntimeWarning : valeur invalide rencontrée dans la puissance

Voici une partie du code sur lequel je travaille. Regardez la dernière ligne.

def xyz2srgb(xyz):
    """Convert from XYZ colorspace to sRGB"""
    xyz = xyz.T
    srgb = N.zeros_like(xyz)
    srgb[0] = 3.241*xyz[0] - 1.5374*xyz[1] - 0.4986*xyz[2]
    srgb[1] = -0.9692*xyz[0] + 1.876*xyz[1] + 0.0416*xyz[2]
    srgb[2] = 0.0556*xyz[0] - 0.204*xyz[1] + 1.057*xyz[2]

    srgb /= float(srgb.max())

    a = 0.055
    srgb = N.where(srgb <= 0.0031308,
                12.92*srgb,
                (1+a)*srgb**(1/2.4)-a)

Il y a une erreur :

 ./example.py:29: RuntimeWarning: invalid value encountered in power
  (1+a)*srgb**(1/2.4)-a)

Est-ce une limite d'autonomie ? J'ai trouvé un fil similaire sur SO : Erreur Numpy : valeur invalide rencontrée dans la puissance

Un indice ? Merci.

4voto

DSM Points 71975

Vous devriez imprimer les valeurs de srgb . Ce n'est probablement pas une erreur de gamme, c'est que les coefficients négatifs ici

srgb[0] = 3.241*xyz[0] - 1.5374*xyz[1] - 0.4986*xyz[2]
srgb[1] = -0.9692*xyz[0] + 1.876*xyz[1] + 0.0416*xyz[2]
srgb[2] = 0.0556*xyz[0] - 0.204*xyz[1] + 1.057*xyz[2]

font qu'il est tout à fait possible que des éléments de srgb peut être négatif, et à moins que vous ne travailliez déjà dans des nombres complexes, vous obtiendrez un avertissement lorsque vous prendrez la puissance :

>>> import numpy
>>> numpy.array([-2.0])
array([-2.])
>>> numpy.array([-2.0])**(1/2.4)
__main__:1: RuntimeWarning: invalid value encountered in power
array([ nan])
>>> numpy.array([-2.0+0j])**(1/2.4)
array([ 0.34548198+1.28935629j])

Les arguments de where seront évaluées avant d'être passées, de sorte que les pouvoirs seront pris avant la branche sur la méthode srgb <= 0.0031308 divise les valeurs, et l'alerte est déclenchée.

0voto

Pour ces erreurs, vous pouvez utiliser le flottant dans l'exposant. par exemple :

>>> test = np.linspace(0,10,1000);)

>>> expos = 2*np.power(test,**6.**)+2*np.power(test,**4.**)

Meilleures salutations

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X