Python Numpy:如何在没有警告的情况下计算日志?

Python Numpy:如何在没有警告的情况下计算日志?,python,numpy,Python,Numpy,我刚升级到新版本的Anaconda,其中 %matplotlib inline from numpy import inf, arange, array, linspace, exp, log, power, pi, cos, sin, radians, degrees from matplotlib import pyplot as plt x = linspace(0, 10) plt.plot(x, log(x),'o', label='ECDF') 工作正常,但将返回警告 Runti

我刚升级到新版本的Anaconda,其中

%matplotlib inline

from numpy import inf, arange, array, linspace, exp, log, power, pi, cos, sin, radians, degrees
from matplotlib import pyplot as plt
x = linspace(0, 10)
plt.plot(x, log(x),'o', label='ECDF')
工作正常,但将返回警告

RuntimeWarning: divide by zero encountered in log
当然,问题是我使用了
x=linspace(0,10)
,它从0开始,然后将它传递给
log(x)
。但问题是,如何重构代码,从而消除警告


一般来说,大多数绘图总是以0开头。类似于
x=linspace(0.00000001,10)
的内容在我看来非常难看。

对数在0中没有定义,因此您不可能在0处为该函数绘制图形。我看到的一个选项是,不绘制log(x),而是绘制更复杂的函数:

lambda x: log(x) if x > 0 else 0
当然,您可以为x=0选择不同的值,但我认为
0
是有意义的


使用
linspace
的参数可以排除最后一个点(通过使用
x=linspace(0,10,endpoint=False)
),但我认为没有办法排除起始点。

Numpy提供了一种很好的机制,可以使用
errstate
抑制警告,当与
一起使用时,仅在本地适用

with np.errstate(divide = 'ignore'):
    plt.plot(x, np.log(x),'o', label='ECDF')

但是,只有当您无法“手动”修改代码以避免警告时,我才建议您使用此方法。

请查看此文档:“大多数绘图始终以0开头”。当然,此方法不应该。。。