numpy.fromfile
の単一の呼び出しを使用して読みたいバイナリには、さまざまなブロックがあります。各ブロックの形式は次のとおりです。ここでは、バイナリの形式であるnumpy.fromfileを使用して分散バイナリデータを読み取る
OES=[
('EKEY','i4',1),
('FD1','f4',1),
('EX1','f4',1),
('EY1','f4',1),
('EXY1','f4',1),
('EA1','f4',1),
('EMJRP1','f4',1),
('EMNRP1','f4',1),
('EMAX1','f4',1),
('FD2','f4',1),
('EX2','f4',1),
('EY2','f4',1),
('EXY2','f4',1),
('EA2','f4',1),
('EMJRP2','f4',1),
('EMNRP2','f4',1),
('EMAX2','f4',1)]
:
Data I want (OES format repeating n times)
------------------------
Useless Data
------------------------
Data I want (OES format repeating m times)
------------------------
etc..
私は私が欲しいデータと無駄なデータ間のバイト増分を知っています。私はまた、私が望む各データブロックのサイズを知っています。
これまでのところ、私は、ファイルオブジェクトf
に追求して、呼び出すことによって、私の目標を達成しています
nparr = np.fromfile(f,dtype=OES,count=size)
だから私は、私がしたい各データブロックに対して異なるnparr
を持っており、一つにすべてnumpy
の配列を連結します新しい配列。
私の目標は、(メモリの目的で)連結せずに必要なすべてのブロックを持つ単一の配列を持つことです。つまり、私はnparr = np.fromfile(f,dtype=OES)
に一度だけ電話したいと思う。この目標を達成する方法はありますか?
はどうもありがとうございました!私もこれを考慮していました。私はメモリがどのように管理されているのか少しばかげている。これは、np.fromfileとnparrから重複したメモリを生成しませんか? nparrサブセットはnp.fromfileのビューですか?またはコピー?私のテストに基づいて、そのようなアイテムの割り当てがコピーを作成しているようです。私はおそらく間違っています。すばらしい提案をありがとう。 – snowleopard
各ブロックに対して、 'fromfile(f、count = n、dtype = OES)'は長さ 'n'の配列を作成します。その配列は 'nparr'の適切な範囲にコピーされます。 'fromfile'で作成された配列は他の場所には割り当てられていないので、そのメモリはPythonで再利用できるようになっています。 –
あなたは利用できないことを意味しましたか? Pythonのガベージコレクタに関する私の読書に基づいて、あなたが意味していたことが完全に理解できるでしょう。 – snowleopard