如果条目满足特定条件python,则绘制函数



假设x从(0到10(;现在对于x<5,我需要画出8*x,否则我需要画50*x。我的尝试:

import matplotlib.pyplot as plt
import numpy as np
def f(x):   
if x<=3:
return (8*x)
else:
return (50*x)

t=np.linspace(0,10,100)
plt.plot(t,f(t))
plt.ylabel('s')
plt.xlabel('t')
plt.show()

但它显示了错误:

具有多个元素的数组的真值不明确。

x是长度为100np.array。Numpy不能同时计算整个数组的真值,无论是一个元素还是所有元素。

您必须将单个元素传递给函数,以便进行比较。


编辑:

要么你用理解来传递单个元素(要么用for循环(:

f_t = np.array([f(x) for x in t])
plt.plot(t, f_t)

或者地图:

f_t = np.array(list(map(f, t)))
plt.plot(t, f_t)

但根据这篇文章,理解实际上比地图略快。。。

我相信您要求的是元素操作。这里是线性数组中的x,如果xi'th索引小于或等于5,则需要执行8*x(i)。否则,您希望执行50*x(i)。假设是这样,我的解决方案是,

import matplotlib.pyplot as plt
import numpy as np
def f(x):
if x <= 5:
return 8*x
else:
return 50*x

t=np.linspace(0,10,100)
plt.plot(t, np.array(list(map(f, t))))
plt.ylabel('s')
plt.xlabel('t')
plt.show()

您收到的The truth value of an array with more than one element is ambiguous.错误表示您正在对x阵列执行单元素比较。如果要执行元素操作,最好使用map

t是一个数组,您需要传递它的元素,而不是数组本身。

for x in t
plt.plot(x, f(x))

顺便说一句,你也需要修复你的功能:

def f(x):   
if x<=5:
return (8*x)
else:
return (50*x)

最新更新