python中的日志函数的简单绘图

时间:2019-01-30 18:34:40

标签: python python-2.7 matplotlib

我写了一个简单的函数在python中绘制日志:

import matplotlib.pyplot as plt
import numpy as np

x = list(range(1, 10000, 1))
y = [-np.log(p/10000) for p in x]

plt.scatter(x, y) # also tried with plt.plot(x, y)

plt.show()

我只想看看情节的样子。

fn.py:5: RuntimeWarning: divide by zero encountered in log
  y = [-np.log(p/10000) for p in x]

我得到了以上错误,最重要的是,我得到了一个空白图,甚至范围也错误。

奇怪的是,为什么我用数字除以divide by zero警告?

如何正确绘制函数?

2 个答案:

答案 0 :(得分:3)

尽管您已标记python-3.x,但似乎您正在使用python-2.x,其中p/10000的值p < 10000会为0,因为除法运算符{{1} }在/中执行整数除法。 如果是这种情况,则可以显式使用python-2.x而不是10000.0来避免这种情况,并进行浮点除法。

10000中不需要使用.0,因为默认情况下它执行浮点除法。因此,您的代码虽然可以在python 3+中正常工作

python 3.6.5

enter image description here

另外,您可以使用NumPy的import matplotlib.pyplot as plt import numpy as np x = list(range(1, 10000, 1)) y = [-np.log(p/10000.0) for p in x] plt.scatter(x, y) plt.show() 生成arange并完全避免使用x并使用矢量化操作。

list

答案 1 :(得分:1)

为什么要导入numpy然后避免使用它?您可以简单地做到:

[HttpPost]
[ActionName("exec")]
public async Task<ActionResult> executePost([FromRoute]string client)
{
    HttpContent response = await _hRequest.PostDataAsync(Request, Request.Form, 
    HttpContext.Request.QueryString);
    return response
}

如果要将numpy引入图片中,请考虑以类似numpy的方式进行操作:

from math import log
import matplotlib.pyplot as plt

x = xrange(1, 10000)
y = [-log(p / 10000.0) for p in x]

plt.scatter(x, y)
plt.show()