1
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

このコードは配列を反復処理し、条件「<0.5」を満たす最初の 3 つの連続した値を探します。

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

「時系列」データを使用して、t、t+1s、t+2s の値を比較しています

データが 1Hz でサンプリングされた場合、3 つの連続する値が比較され、上記のコードは正しい (ポイント 0、1、2)

データが 2Hz でサンプリングされている場合は、1 つおきのポイントを比較する必要があります (ポイント 0、2、4)。データが 3Hz でサンプリングされている場合は、3 つおきのポイントを比較する必要があります (ポイント 0、3、6)。

入力データのサンプル レートは変動する可能性がありますが、変数 'SRate' として認識され、記録されます。

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

このポイントごとの分析に「時間」を組み込むのを手伝ってくれませんか

4

2 に答える 2

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

次に、このヘルパーを使用して、必要なものを取得できます。

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-27T10:41:44.737 に答える