我写了一个简单的函数在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
警告?
如何正确绘制函数?
答案 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
另外,您可以使用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()