假设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
是长度为100
的np.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
,如果x
的i'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)