gpt4 book ai didi

python - 计算限制内的数据点,并对孤立点应用缓冲区[数据分析]

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:26 27 4
gpt4 key购买 nike

我一直在尝试解决这个问题:

我有一组数据点,对应于一组时间值。即 values =[1,2,3,4,5,6,7,8,4] times = [0.1,0.2,0.3,0.4]... 等等,这是一个示例速率为10hz。

我需要找到两个限制之间花费的时间。例如,如果我的限制是 3 和 5(包含 3 和 5),那么 3、4、5、4 都在我的限制内。

如果我将时间计算为(点-1)/采样率的数量,或者分组的开始时间和结束时间,我将错过孤立的数据点(第二个4 )

我建议使用两侧采样率一半的假想缓冲区来对孤立事件进行建模。

但是我在代码中实现这个时遇到问题(python)我需要一种迭代点、计算点数的方法,并通过配对来执行(点数-1)/采样率。以及如何拾取奇异点并将缓冲区值应用于点数。

我似乎找不到 ifwhile 语句的正确组合来执行此操作。

最佳答案

这是一个可以完成您想要的功能的函数。在指定限制内​​的多个数据点的运行被赋予一个时间值,该时间值等于数据点的数量乘以采样周期(即采样频率的倒数),孤立的单点被赋予采样周期一半的值。

#!/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

要检查这段代码是否确实达到了您想要的效果,您可以将一些打印语句放入 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 - 计算限制内的数据点,并对孤立点应用缓冲区[数据分析],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29430625/

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