RuntimeWarning:在p中遇到无效值

2024-06-26 02:38:15 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我正在编写的代码的一部分。看最后一行。

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)

它抛出一个错误:

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

这是范围限制吗?我在上面发现了一个类似的线索,所以:Numpy error: invalid value encountered in power

有线索吗?谢谢。


Tags: 代码infromconvertvaluedefpowerxyz
2条回答

您应该打印出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 <= 0.0031308条件上的分支划分值并触发警告之前,将获取幂。

对于这些错误,可以使用指数中的浮点数。例如:

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

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

致意

相关问题 更多 >