比較関数では、基本的に、長いバイナリオブジェクト(たとえば、aaaAAAbbbBBB)内のパターン(たとえば、「AAA」)を探しています。
私はファイルを逆方向に処理しており(一致が最初よりも最後に近いことを知っています)、一致がチェックされている変数に1バイトを追加します。
1. aaaAAAbbbBB[B]
2. aaaAAAbbbB[BB]
3. aaaAAAbbb[BBB]
4. aaaAAAbb[bBBB]
5. ...
n. aaa[AAAbbbBBB]
一致が見つかりました、オフセット= -n
パターンの長さが3要素であることがわかっているので、検索変数をインクリメントするのではなく、単純にウィンドウ化できるかどうか疑問に思いました。一致がリストの深さ+ 1,000,000要素になると、非常に遅くなります。同じデータのウィンドウ表示は次のようになります。 :
1. aaaAAAbbb[BBB]
2. aaaAAAbb[bBB]B
3. aaaAAAb[bbB]BB
4. aaaAAA[bbb]BBB
5. ...
n. aaa[AAA]bbbBBB
一致が見つかりました、オフセット= -n
私の現在の検索は次のようになります。
if marker in f_data[-counter:]:
offset = (len(f_data)-counter)+len(marker)
return offset
MATLABでは、配列のアドレス指定を使用して配列内を移動します(たとえば、window = a [5:8]、window = a [4:7]などを呼び出します)が、Python(2.7)ではそれが不可能だと思います。
スライディングウィンドウを使用するためのいくつかの提案を見ることができます(Pythonのローリングまたはスライディングウィンドウイテレータ-これは厳密に一致しているように見えます)が、実装方法がわからないか、方法がわからないライブラリを参照しています使用する。
これを行うための組み込み関数はありますか?