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

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

У меня есть набор точек данных, которые соответствуют набору значений времени. т.е. 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)

  • Получение бесконечного цикла в серии фибоначчи в Python
  • Как это происходит во время цикла?
  • Как остановить цикл While?
  • Пока пользовательский ввод петли в диапазоне
  • Ускорение расстояния между всеми возможными парами в массиве
  • Хотя однострочный контур цикла
  • Сохраняется только последняя итерация цикла while
  • Как использовать raw_input () с while-loop
  • В то время как цикл проверяет правильность ввода пользователя?
  • Как перейти к следующему индексу?
  • While-loop с if-statement быстрее, чем while-loop
  •  
    Interesting Posts for Van-Lav

    работник сельдерея не повторяет задачу после вызова повтора ()

    Добавление папки на путь Python навсегда

    Как создать проект, который можно установить с помощью pip?

    Vim's Omnicompletion с Python просто не работает

    Индексирование списка с уникальным индексом

    matplotlib: Понимание и изменение меток оси для графика рассеяния, обновляемого постепенно

    Что означает «Недействительный выбор» при использовании валидации wtform для одного поля?

    Данные о точках метки метки объекта Seaborn FacetGrid PointPlot

    Вычисление комбинаций длины k из списка длины n с использованием рекурсии

    pickle не может импортировать модуль, который существует?

    Могу ли я создать одно яйцо для нескольких версий python?

    Как фильтровать (или заменять) символы Unicode, которые занимают более 3 байтов в UTF-8?

    Как создать временный файл (для записи на) в C #?

    Загрузка файла Django Rest Framework

    Удаление строки DataFrame в Pandas на основе значения столбца

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