Подсчет точек данных в пределах и применение буфера к изолированным точкам

Я застреваю, пытаясь решить эту проблему:

У меня есть набор точек данных, которые соответствуют набору значений времени. т.е. values =[1,2,3,4,5,6,7,8,4] times = [0.1,0.2,0.3,0.4]... и так далее, это частота дискретизации 10 Гц.

Мне нужно найти время, проведенное между двумя пределами. например, если мои лимиты составляют 3 и 5 включительно, то 3,4,5,4 находятся в моих пределах.

если я вычислил время как число ( points -1) /sample rate , или время начала и окончания группировки, я пропущу выделенную точку данных (второй 4)

Я предложил использовать мнимый буфер с половиной частоты дискретизации с одной стороны для моделирования изолированных событий.

но у меня возникают проблемы с реализацией этого кода (python). Мне нужен способ итерации через точки, подсчет количества точек, с возможностью сопряжения (количество точек-1) / частота дискретизации. а также как подобрать особые точки и применить значение буфера к числу точек.

Кажется, я не могу найти правильную комбинацию утверждений if и while .

One Solution collect form web for “Подсчет точек данных в пределах и применение буфера к изолированным точкам”

Вот функция, которая делает то, что вы хотите. Заданиям нескольких точек данных, находящихся в указанных пределах, присваивается значение времени, равное количеству точек данных за период выборки (т. Е. Обратная частота выборки), выделенным единичным точкам присваивается значение половины периода выборки.

 #!/usr/bin/env python ''' Estimate time of data points falling within specified limits From http://stackoverflow.com/q/29430625/4014959 Written 2015.04.03 by PM 2Ring, with help from Antti Haapala and Martijn Pieters ''' from itertools import groupby def estimate_time(values, lo_lim, hi_lim, sample_rate): #Find values that are in range in_range = [lo_lim <= v <= hi_lim for v in values] #Find runs of in-range values runs = [sum(1 for _ in group) for v, group in groupby(in_range) if v] #Estimate total time spent in-range total_time = sum(v if v > 1 else 0.5 for v in runs) return total_time / sample_rate values = [1, 2, 3, 4, 5, 6, 7, 8, 4] sample_rate = 10.0 # in Hz lo_lim = 3 hi_lim = 5 print estimate_time(values, lo_lim, hi_lim, sample_rate) 

вывод

 0.35 

Чтобы убедиться, что этот код действительно делает то, что вы хотите, вы можете поместить некоторые операторы печати в in_range estimate_time() чтобы показать содержимое in_range и runs .


Одна вещь, которую вы можете сделать, чтобы уменьшить требования к памяти, – это преобразование понятий списка в выражения генератора. Условные записи списков должны создавать целый новый список в памяти (который удаляется, когда он выходит за рамки); выражение генератора немного медленнее, но ему не нужно создавать список – результаты генерируются по мере необходимости. Синтаксис очень похож: просто замените квадратные скобки списка comp на круглые скобки, чтобы превратить его в gen exp.

Так что измените

in_range = [lo_lim <= v <= hi_lim for v in values]
в
in_range = (lo_lim <= v <= hi_lim for v in values)

а также

runs = [sum(1 for _ in group) for v, group in groupby(in_range) if v]
в
runs = (sum(1 for _ in group) for v, group in groupby(in_range) if v)

Interesting Posts

Python: сложные списки списков, где один var зависит от другого (x для x в t для t в тестах)

Python: отправка и получение больших файлов через POST с использованием вишневого

Does Conda заменяет необходимость в virtualenv?

Как проверить ограничение уникальности по внешнему ключу (django)

Ошибка импорта без модуля с именем zlib (пиво установленный python)

psycopg2 фактически не вставляет данные

Как работает addStretch в QBoxLayout?

matplotlib legend: Включая маркеры и строки из двух разных графиков в одной строке

Django: Неправильноконфигурировано: параметр SECRET_KEY не должен быть пустым

взаимодействие Python и Torch7 (Lua) через общую библиотеку

Расписание скриптов Python – Windows 7

Найти ближайший float в массиве для всех поплавков в другом массиве

Python: заменить теги, но сохранить внутренний текст?

Matplotlib: рисовать линии сетки за другими элементами графика

Как написать функцию, которая возвращает другую функцию?

Python - лучший язык программирования в мире.