for i,(x,y,z) in enumerate( zip(analysisValues, analysisValues[1:], analysisValues[2:]) ):
if all(k<0.5 for k in (x,y,z)):
instance = i
break
此代码遍历数组并查找满足条件'&lt; 0.5'的前3个连续值
==============================
我正在使用'timeseries'数据并比较t,t + 1s和t + 2s的值
如果数据以1Hz采样,那么将比较3个连续值并且上面的代码是正确的(点0,1,2)
如果数据以2Hz采样,则必须比较每个其他点(点0,2,4)或 如果数据以3Hz采样,则必须比较每个第三点(点0,3,6)
输入数据的采样率可能会有所不同,但已知并记录为变量'SRate'
==============================
请你帮我把'时间'纳入这个逐点分析
答案 0 :(得分:1)
您可以使用扩展切片表示法,将步骤值设为SRate
:
for i,(x,y,z) in enumerate(zip(analysisValues, \
analysisValues[SRate::SRate], \
analysisValues[2 * SRate::SRate])):
答案 1 :(得分:0)
让我们首先构造辅助生成器,它执行以下操作:
from itertools import izip, tee, ifilter
def sparsed_window(iterator, elements=2, step=1):
its = tee(iterator, elements)
for i,it in enumerate(its):
for _ in range(i*step):
next(it,None) # wind forward each iterator for the needed number of items
return izip(*its)
print list(sparsed_window([1,2,3,4,5,6,7,8,9,10],3,2))
输出:
>>>
[(1, 3, 5), (2, 4, 6), (3, 5, 7), (4, 6, 8), (5, 7, 9), (6, 8, 10)]
这个助手避免了我们在内存中创建几乎相同的列表。它使用tee
来仅缓存所需的部分。
帮助程序代码基于pairwise
recipe
然后我们可以使用这个助手来获得我们想要的东西:
def find_instance(iterator, hz=1):
iterated_in_sparsed_window = sparsed_window(iterator, elements=3, step=hz)
fitting_values = ifilter(lambda (i,els): all(el<0.5 for el in els), enumerate(iterated_in_sparsed_window))
i, first_fitting = next(fitting_values, (None,None))
return i
print find_instance([1,0.4,1,0.4,1,0.4,1,0.4,1], hz=2)
输出:
>>>
1