Numpy在什么情况下会return"Divide by zero error"?

Numpy in what situation will return "Divide by zero error"?

我有如下表达式,其中 data 是矩阵,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(...) 小于 "machine epsilon")并且您正在计算 np.log(1.0 - 1.0/(1.0 + np.exp(...))).