2017-05-19 13 views
0

私は一連のイメージとタイムスタンプデータを含む大きなバイナリファイル(〜4 GB)を持っています。私は、ユーザーが指定したタイムスタンプに最も近いイメージを見つけたいと思っています。しかし、ファイルには何百万ものタイムスタンプがあります。 Python 2.7では、seek、read、struct.unpackを使用して、すべてのタイムスタンプを配列に読み込むのに900秒以上かかりました。すべての値を読み取る必要のない最も近い値を見つけるための効率的なアルゴリズムはありますか?それらは単調に増加するが、非常に不規則な間隔で増加する。バイナリファイルの最も近い値を見つける

+0

"バイナリファイル"と言うと、ファイル内のデータの構造は何ですか?それはある時点でピクルスされたPythonのリストですか? – inspectorG4dget

+0

いいえ、それは各フレームの終わりにタイムスタンプが挿入された画像データ用の16ビット整数のストリームです。タイムスタンプは、年の初めから4バイト、その後は2バイト、その後10MHzのクロックティックでは3バイトです。 –

答えて

0

最初の試み。一見都合のよいことですが、それが最も効率的な方法かどうかわかりません:

平均タイムステップを計算するために最初と最後のタイムスタンプとフレーム数をとります。

ターゲットタイムスタンプと開始タイムスタンプの平均タイムステップと差を使用して、近似インデックスを検索します。

ターゲットに対しておおよその2つのタイムスタンプを確認します。

ターゲットが間にある場合は、最小の差でインデックスを取得します。 そうでない場合は、近似インデックスを新しい開始または終了として設定し、それを繰り返します。

関連する問題