1

私は大きなモデルからの情報を扱っています。つまり、2 つの float 列 (X と Y としましょう) を持つ大きな ascii ファイルがたくさんあります。ただし、これらのファイルを読み取る必要がある場合は常に時間がかかるため、バイナリ ファイルに変換すると、読み取りプロセスがはるかに高速になるのではないかと考えました。

uu.encode(ascii_file,binary_file) コマンドを使用して asciifile をバイナリ ファイルに変換したところ、非常にうまく機能しました (実際、デコード部分をテストし、同じファイルを復元しました)。

私の質問は: バイナリ ファイルを直接 Python に読み込み、データを 2 つの変数 (x と y) に取得する方法はありますか?

ありがとう!

4

3 に答える 3

3

float 列が Python でどのように表現されるかを指定していません。このcPickleモジュールは高速な一般的なソリューションですが、Python からのみ読み取り可能なファイルを作成し、(ネットワークから受信した) 信頼されていないデータの読み取りを許可してはならないという欠点があります。numpy 配列を含むすべての通常のデータ型で動作する可能性があります。

numpy を使用してデータを numpy 配列に保存できる場合は、対応する読み込み関数を調べてnumpy.saveくださいnumpy.savetxt。これにより、手動でデータを抽出するよりも優れたパフォーマンスが得られるはずです。

array.arrayには、配列データをファイルに書き込む方法もありますが、配列データはネイティブ形式で書き込まれ、異なるアーキテクチャから読み取ることができないという欠点があります。

于 2012-09-29T16:45:09.877 に答える
1

python のstruct モジュールを調べてください。おそらく、データの読み取りと書き込みに使用したいものです。

于 2012-09-29T16:37:20.873 に答える
0

提案された struct モジュールの代わりに、モデルが float/double (座標) の場合はarraymoduleが表示され、モジュール内のどの ops よりもはるかに高速でなければならないことをお勧めしstructます。その欠点は、コレクションが均一であることです。最初の値を奇数インデックスに、2 番目の値を偶数インデックスに、または順番に持つ必要があります。

于 2012-09-29T16:40:42.600 に答える