Python “Numpy在什么情况下会回来”;除零误差“;?

Python “Numpy在什么情况下会回来”;除零误差“;?,python,numpy,zero,divide,Python,Numpy,Zero,Divide,我有一个表达式如下,其中asdata是一个矩阵,theta是一个向量,python不断提高除以0的误差。 但是唯一的分母是(1+e^x),这个矩阵中的每个元素无论如何都不能是0 np.sum(-data[:,-1]*np.log(1.0/(1.0+np.exp(-np.dot(data[:,:-1],theta.transpose()))))) 我是否忽略了任何会产生此错误的情况 奇怪的是,程序运行良好,结果正确,即使每次都显示此错误。从问题注释中给出的错误消息: py:21: Runtime

我有一个表达式如下,其中asdata是一个矩阵,theta是一个向量,python不断提高除以0的误差。 但是唯一的分母是(1+e^x),这个矩阵中的每个元素无论如何都不能是0

np.sum(-data[:,-1]*np.log(1.0/(1.0+np.exp(-np.dot(data[:,:-1],theta.transpose())))))
我是否忽略了任何会产生此错误的情况


奇怪的是,程序运行良好,结果正确,即使每次都显示此错误。

从问题注释中给出的错误消息:

py:21: RuntimeWarning: divide by zero encountered in log return (np.sum(-data[:,-1]*np.log(1.0/(1.0+np.exp(-np.dot(data[:,:-1],theta.transpose()‌​))))-(1-data[:,-1])*np.log(1-1.0/(1.0+np.exp(-np.dot(data[:,:-1],theta.transpose(‌​))))))+np.sum(theta[1:]**2)*lamda/2.0)*1.0/data.shape[0]
似乎您正在计算
np.log(0)
。例如

>>> import numpy as np
>>> np.log(0)
__main__:1: RuntimeWarning: divide by zero encountered in log
-inf
>>>

这很可能是因为
np.exp(…)
溢出,或者
1.0+np.exp(…)
返回1.0(因为
np.exp(…)
小于“机器ε”),并且您正在计算
np.log(1.0-1.0/(1.0+np.exp(…)

是否可能是
theta
数据[:,:-1]
是否包含复数?(不太可能,因为这看起来像是逻辑回归的手动实现,但可能?)它也不应该来自错误的大负数,因为
np.log(0)
给出
inf
,并且不会产生被零除的错误。你能打印
theta
data[:,:-1]
中数据的一小部分吗?
np.log(0)
给出警告
RuntimeWarning:除以log中遇到的零,返回
-inf
(使用numpy 1.9.1)。我已经测试过,它们的格式是float64,这应该是一个问题吗?这是您在计算
np.log(0)
时得到的警告。