gpt4 book ai didi

python - 如何在Python中计算非零信号之间的时间间隔

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:15 24 4
gpt4 key购买 nike

我有两个长度相同的列表。第一个列表是时间,第二个列表是具有三个值0、1、2的信号。例如,

t = [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0,
110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 170.0, 180.0, 190.0, 200.0,
210.0, 220.0, 230.0, 240.0, 250.0, 260.0, 270.0, 280.0, 290.0, 300.0,
310.0, 320.0, 330.0, 340.0, 350.0, 360.0, 370.0, 380.0, 390.0]

s = [2, 1, 2, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 2, 2, 1, 1, 2, 1, 2]

信号:

signal

我想计算信号非零和零时的时间间隔。结果应该是

t_nonzero = [40, 10, 10, 10, ...]
t_zero = [20, 10, 40, 70, ...]

Python中有没有一种有效的方法来做到这一点?

最佳答案

这就足够了:

start = t[1]
sig = s[1]==0 # init signal
n = [] # non zero
z = [] # zero
for i,(x,y) in enumerate(zip(t[1:],s[1:])):
cur = y==0 # current signal
# signal changes or meets the last frame
if sig != cur or i == len(t[1:])-1:
off = x - start
z.append(off) if sig else n.append(off)
start = x
sig = cur

请注意,第一帧被丢弃。

<小时/>

更新:另一个解决方案是对信号进行计数。

def fn(n):
n[-1] += 1

n = [0] # non-zero
[fn(n) if x != 0 else n.append(0) for x in s[1:]] # discard the first frame
n = [x * 10 for x in n if x > 0]

z = [0] # zeros list
[fn(z) if x == 0 else z.append(0) for x in s[1:]]
z = [x * 10 for x in z if x > 0]

关于python - 如何在Python中计算非零信号之间的时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54228394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com