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')

工作正常,但会返回警告

RuntimeWarning: divide by zero encountered in log

肯定的是,问题是我使用x = linspace(0, 10),该CC_1从0开始,然后将其传递给log(x)。但是问题在于,我该如何重构代码,所以警告失去了?

一般来说,大多数情节总是以0开头0。

numpy提供了使用errstate抑制警告的好机制,该机构仅在与with一起使用时适用于本地。

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

但是,只有当您无法"手动"修改代码以避免警告时,我才建议您建议这种方法。

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

lambda x: log(x) if x > 0 else 0

当然,您可以为X = 0选择一个不同的值,但我认为0是有道理的。

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

相关内容

最新更新