当尝试绘制指数函数时,我得到一个线性图:
import math
import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
x = np.array(x_range)
y = eval(formula)
plt.plot(x, y)
graph('100*(np.power(0.8, x))', (0,100))
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么? 输出图像
你真的不应该使用 EVAL。然而,抛开这个问题不谈,问题是您传递两个值的元组作为 x_range 参数的参数。x这是用值创建 a array([ 0, 100]),如果您创建相应的 y ,您将只有两个点,所以您当然会得到一条线。您想使用np.arange而不是np.array. 但是,如果您将元组传递给graph函数,则在将元组传递给函数时需要解压该元组,np.arange.因此这应该可行:
def graph(formula, x_range):
x = np.arange(*x_range)
y = eval(formula)
plt.plot(x, y)
Run Code Online (Sandbox Code Playgroud)
但说真的,为什么eval不直接传递一个函数呢?
def graph(func, x_range):
x = np.arange(*x_range)
y = func(x)
plt.plot(x, y)
graph(lambda x: 100*(np.power(0.8, x)), (0,100))
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
25552 次 |
| 最近记录: |