Как точно сэмплировать в питоне - PullRequest
0 голосов
/ 11 июля 2019

На работе мне нужно: делать выборки каждые 0,08 секунды за 10 секунд.

Я использую цикл, но не получаю.

import time
start_t =time.time()
while time.time() -start_t <=10:
    if float(time.time() -start_t) % float(0.08) == 0:
       """do sample record""

наконец, я получил 0 данных,Я думаю, что if float(time.time() -start_t) % float(0.08) == 0: не работает.

Я запутался, как установить условие для ввода кода выборки.

Ответы [ 3 ]

3 голосов
/ 11 июля 2019

Самый простой способ - использовать time.sleep:

from time import sleep
for i in range(125):
    """do sample record"""
    sleep(0.08)

Вы, вероятно, не получите данных, потому что вы собираете время только в отдельные моменты.В эти моменты они никогда не станут идеальными, кратными 0,08.

1 голос
/ 11 июля 2019

Вы используете деление числа с плавающей запятой на число с плавающей запятой, и time.time () вернет длинное десятичное число, поэтому вы не получите данных, потому что ваш результат всегда 0,00001234 или что-то в этом роде.Я думаю, что вы должны использовать раунд, чтобы получить 2 десятичных числа

temp = time.time()-start_t
if round(temp,2) % 0.08 == 0:
"""do sample record"""

Однако, этот скрипт вернет около 27000 результата в 10 секунд.Потому что у вас будет 0,08, 0,081,0.082 и т. Д., И все они будут выполнять вашу запись.

Поэтому я думаю, что вам лучше работать с решением Максимилиана Яниша (с использованием функции сна).Я просто хочу объяснить, почему вы не можете найти решение.

Надеюсь, это поможет!

0 голосов
/ 11 июля 2019

это, вероятно, никогда не будет в точности верно, так как проверка на равенство с плавающей точкой должна быть очень точной.

попробуйте сделать что-то вроде:

start_t =time.time()
looped_t = start_t
while time.time() - start_t <= 10:
    if time.time() - looped_t >= 0.08:
       looped_t = time.time()
       """do sample record""

Ответ сна от Maximillian тоже подойдет, за исключением того, что выборка занимает значительное время (несколько сотен секунд), тогда вы не останетесь рядом с требованием 10 секунд.

Это также зависит от того, что вы расставите по приоритетам, так как этот метод в большинстве случаев обеспечит 124 выборки вместо точных 125, которые вы ожидаете (и получите с помощью функции сна).

...