Как рассчитать временной интервал между ненулевым сигналом в питоне

Вариант 1. Чтобы измерить время отклика с помощью curl, используйте следующую команду:

curl -o /dev/null -s -w 'Total: %{time_total}\n'  https://www.google.com

Выход для образца:

Вариант 2. Чтобы получить более подробную информацию, используйте следующую команду:

curl -o /dev/null -s -w 'Connect: %{time_connect}\nStart Transfer: %{time_starttransfer}\nTotal: %{time_total}\n'  https://www.google.com

Выход образца:

Ref : Получить время отклика с помощью curl

1
задан atline 17 January 2019 в 03:08
поделиться

2 ответа

Этого будет достаточно:

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]
0
ответ дан Tien Phan 17 January 2019 в 03:08
поделиться

Конечно, я надеюсь, что это поможет.

Это функция, которую вы можете использовать для подключения двух списков

def btwn(t,s):
    t_zero = []
    t_non_zero = []
    running = 0
    if s[0]==0: #Assign the starting value
        prev_zero = True
    else:
        prev_zero = False
    for score in range(len(s)): #run the length of the lists, using the position
        #compare current score to previous score
        #if the previous and current are same, keep a running
        #total of the difference, if they change, dump that 
        #running total into the appropriate list
        if score != 0: #unless it's the first element, add to running 
            running += t[score] - t[score - 1]
        if (s[score] == 0 and prev_zero) or (s[score] != 0 and not prev_zero): 
        #unchanged, add to running
            continue    
        elif s[score] == 0: #changed to zero from non-zero
            prev_zero = True
            t_non_zero.append(running)
            running = 0
        else: #changed to non-zero from zero
            prev_zero = False
            t_zero.append(running)
            running = 0
    if prev_zero: #add the final value to one of the two lists
        t_zero.append(running)
    else:
        t_non_zero.append(running)
    return t_zero, t_non_zero #return the lists

Эта функция принимает 2 списка и возвращает 2 списка.

Функция начинается с текущего вычисленного числа в нуле, считывает первое значение списка из s, чтобы решить, начинаем ли мы с нуля, или нет, а затем последовательно просматривает каждое значение в списке. Он добавляет промежуточный итог на каждой итерации в зависимости от времени t между этим элементом и предыдущим. Если значение переключается с нуля на ненулевое значение или наоборот, оно сбрасывает промежуточную сумму в соответствующий список и сбрасывает промежуточную сумму.

Я протестировал его, и эта функция вернула нужные вам списки, хотя первый ненулевой элемент на самом деле равен 50, а не 40. Значение s равно non_zero для первых 5 последовательных периодов по 10 секунд, и это не до шестого элемента, который меняется на ноль. Несмотря на то, что первый элемент имеет время = 0, он по-прежнему не равен нулю для каждого пробела между элементами, пока вы не соберете следующее изменение оценки в элементе 6.

Вы можете вызвать функцию и затем назначить ее нужным спискам вывода, если хотите

#example 
t_zero, t_non_zero = btwn(t,s)
0
ответ дан Roman Czerwinski 17 January 2019 в 03:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: