我只是升级到新版本的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)
),但我认为没有办法排除起点。