我正在尝试使用Numpy和matplotlib生成分段周期图,如下所示:
import numpy as np
import matplotlib.pyplot as plt
Q1 = lambda t, f, Q_max: Q_max * np.sin(2 * np.pi *f * t)
Q2 = lambda t, f, Q_max: 0
def Q_true(t, f, stat):
while(t >= 1/f):
t -= 1/f
while(t < 0):
t += 1/f
return ((t <= 1/(2*f)) == stat)
Q = lambda t, f, Q_max: np.piecewise(t, [Q_true(t, f, True) , Q_true(t,f, False)], [Q1, Q2], f, Q_max)
Q_max = 225 # mL/sec
f = 1.25 # Hz
t = np.linspace(0,4,101) # secs
plt.plot(t, Q(t, f, Q_max))
问题是Q_true
正在接收整个t
数组而不是单个点。如果我只使用numpy.piecewise
condlist中的小于/大于语句,这不是问题,但使用Q_true
确定它是真还是假更容易。
情节看起来应该是这样的:
有什么想法吗?
谢谢!
答案 0 :(得分:2)
以下版本的Q_true
有效:
def Q_true(t, f, stat):
period = 1/f
return (t % period < period/2) == stat
请注意,您正在命名匿名函数(Q1 = lambda ...
)。在这种情况下,您应该使用def
定义函数。