2012-05-14 3 views
1

이것은 작업중인 코드의 일부입니다. 마지막 줄을보세요.RuntimeWarning : 유효하지 않은 값이 전원에 발생했습니다.

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

이 일부 제한 범위가 :

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) 

그것은 오류가 발생합니다? 그래서 비슷한 스레드를 발견 : Numpy error: invalid value encountered in power

어떤 단서? 감사.

답변

3

srgb의 값을 출력해야합니다. 아마 여기

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의 요소가 음수가 될 수 있다는 것이 전적으로 가능하게하고, 이미 복잡한 숫자에서 작업하지 않는 한, 당신은 때 경고를 올릴 것이라는 점 범위 오류입니다 아니에요 그들이 통과되기 전에 where

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

인수가 평가됩니다, 그래서 srgb <= 0.0031308 조건 분기가 값을 분할하고, 경고가 트리거되기 전에 힘이 이동하게됩니다 : 당신은 전원을.

0

이러한 오류의 경우 지수에서 float를 사용할 수 있습니다. 예를 들어 :

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

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

안부

관련 문제