Python RuntimeWarning:电源中遇到无效值
这是我正在编写的代码的一部分。看最后一行Python RuntimeWarning:电源中遇到无效值,python,numpy,Python,Numpy,这是我正在编写的代码的一部分。看最后一行 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]
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)
这是射程限制吗?我在上面发现了一条类似的线:
有线索吗?谢谢。您应该打印出
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
的元素完全可能为负数,并且除非您已经在使用复数,否则在您使用电源时会发出警告:
>>> 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])
where
的参数将在传递之前进行评估,因此在srgb上的分支之前将获取幂函数。您应该打印出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
的元素完全可能为负数,并且除非您已经在使用复数,否则在您使用电源时会发出警告:
>>> 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])
where
的参数将在传递之前进行计算,因此幂将在srgb上的分支之前获取。对于这些错误,您可以在指数中使用浮点。例如:
>>> test = np.linspace(0,10,1000);)
>>> expos = 2*np.power(test,**6.**)+2*np.power(test,**4.**)
最好的问候对于这些错误,您可以使用指数中的浮点。例如:
>>> test = np.linspace(0,10,1000);)
>>> expos = 2*np.power(test,**6.**)+2*np.power(test,**4.**)
致意