【问题标题】:iterate through an array looking at non-consecutive values遍历查看非连续值的数组
【发布时间】:2013-06-27 10:20:36
【问题描述】:
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

此代码遍历一个数组并查找满足条件“

================================

我正在处理“时间序列”数据并比较 t、t+1s 和 t+2s 处的值

如果数据以 1Hz 采样,则比较 3 个连续值并且上面的代码是正确的(点 0、1、2)

如果数据以 2Hz 采样,则必须每隔一个点进行比较(点 0、2、4)或 如果数据以 3Hz 采样,则必须每隔三个点进行比较(点 0、3、6)

输入数据的采样率可以变化,但已知并记录为变量“SRate”

================================

请您帮我将“时间”纳入这个逐点分析

【问题讨论】:

    标签: python arrays loops compare


    【解决方案1】:

    您可以使用扩展切片表示法,将步长值设为SRate

    for i,(x,y,z) in enumerate(zip(analysisValues, \
                                   analysisValues[SRate::SRate], \
                                   analysisValues[2 * SRate::SRate])):
    

    【讨论】:

    • 感谢您的回答 - 还没有遇到切片符号 :)
    【解决方案2】:

    让我们首先构建辅助生成器,它执行以下操作:

    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
    

    【讨论】:

      猜你喜欢
      • 2013-06-23
      • 2010-12-07
      • 1970-01-01
      • 2015-12-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      相关资源
      最近更新 更多