我想作一个绘图,在不同的时间显示几个脉冲。
我有清单l
以及每个脉冲的时间,例如
l=[1.,2.,24.]
,我有脉冲的持续时间d
,例如d=0.2
。
我可以通过以下方式进行绘制:
import numpy as np
import matplotlib.pyplot as plt
t=np.linspace(0.,30,1000)
l=[1.,2.,24.]
d=0.2
def pulse(t):
if t<l[0]:
L = 0.
elif l[0]<=t<l[0]+d or l[1]<=t<l[1]+d or l[2]<=t<l[2]+d:
L = 1
else:
L=0.
return L
plt.figure(1)
P=map(pulse,t)
plt.plot(t,P)
plt.show()
当然,如果len(l)
很大,我将无法使用此过程,也就是说,我无法用手写方法写出很长的or
链。如何以更综合的方式编写算法?
答案 0 :(得分:2)
您可以使用for循环来测试几种不同的条件。例如:
def pulse(t):
L = 0
for i in range(len(l)):
if l[i] <= t < l[i] + d:
L += 1
return L
答案 1 :(得分:1)
我认为您可以使用numpy indexong来提高效率,并且当然可以为未知数量的if语句编写一个for循环。
p = np.zeros(1000)
for i in l:
p[(0<=t-i) & (t-i<d)] = 1