2016-08-12 5 views
0

私はデータ型の配列を含む読んでいるバイナリファイルがあります:私は使用してdt_particles要素の配列全体を読むことができますnumpyを使用してバイナリファイルから特定のフィールドを読み取る方法は?

dt_particles = np.dtype([('id', np.int64), \ 
         ('x', np.float32), \ 
         ('y', np.float32), \ 
         ('z', np.float32), \ 
         ('vx', np.float32), \ 
         ('vy', np.float32), \ 
         ('vz', np.float32)]) 

を:

numpy.rec.fromfile(FILE_OBJ, dtype=dt_particles, shape=NUM_ELEMENTS) 

私だけidを読むにはどうすればよいですフィールドをバイナリファイルから削除し、他のフィールドをスキップしますか?

答えて

0

私はfromfileをあまり使用していませんが、選択したフィールドを読み取ることができるかどうかは疑問です。明らかに、要素のレイアウトと間隔を決定するのにdtypeを使用しています。選択したフィールドや列を読み取るには、genfromtxtusecolsのようなパラメータはありません。そして、言い方をすると、8バイトを読み、次の6 * 4バイトをスキップします。

すべてを読み、希望のフィールドを選択するだけです。とにかくファイル全体を読む必要があります。

+0

私の唯一の懸念は、大きなデータファイルを使用していることでした。私はできるだけ多くの不要な処理をスキップしたいと思っていました。 numpyがファイル全体をとにかく読み取ると、違いはほとんどありません。 – hazrmard

+0

'read 8 bytes'、' seek forward 24'をファイルの最後まで繰り返すと、1028バイトのチャンク(またはそれ以上)のファイルを読み込んで処理するよりもずっと遅くなります。アイテムの数を制限すると、ファイル全体を読み取る必要はありません。いずれか1つのフィールドがファイルに配布されます。 – hpaulj

関連する問題