我需要绘制一个定义如下的自制分段函数:
import numpy as np
import matplotlib.pyplot as plt
def f(x):
if x >=0 and x <=1:
return 2*np.sqrt(x)
elif x > 1:
return 1+x
x = np.linspace(0.0, 100)
plt.plot(x, f(x))
plt.show()
错误消息是: ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all() 然后,我遵循了python的建议,并将函数的实现更改为:
def f(x):
if x.all() >=0 and x.all() <=1:
return 2*np.sqrt(x)
elif x.all() > 1:
return 1+x
这一次,该图出现了,但不是所定义的功能所意图的曲线。这是错误的曲线。它只是绘制了2 * np.sqrt(x)部分。我真的可以使用一些帮助,非常感谢任何伸出援助之手。
答案 0 :(得分:0)
如果您的意图是分段函数,则应使用np.where()
def f(x):
return np.where(np.logical_and(x >= 0, x <= 1), 2*np.sqrt(x), x+1)
x = np.linspace(0.0, 100)
plt.plot(x, f(x))
或仅使用列表理解
def f(x):
if x >=0 and x <=1:
return 2*np.sqrt(x)
elif x > 1:
return 1+x
x = np.linspace(0.0, 100)
plt.plot(x, [f(i) for i in x])
此外,您可能希望通过将num
的{{1}}参数设置得更高来获得更多的绘图样本