2

2.5 GB のファイルを読み取る必要があります。私は次の構文を使用します:

import numpy as np
limit=4269*352*288*3
mat1=np.zeros(limit, dtype='uint8')
mat1=np.fromfile("path/to/file", "uint8", limit)

この配列を再形成する必要があります。

mat_new=np.zeros([4269, 288, 352, 3], dtype='uint8')
mat_new=np.transpose(np.reshape(mat1,[4269,3,288,352]), [0,2,3,1])

私の 4GB RAM、i7 第 2 世代システムでは、これに約 35 秒かかります。どうにかして速くすることができました。これは私のプログラムの始まりに過ぎず、より複雑なことが先にあるからです。これからいらないmat1

また、Python で「最大メモリに達しました」というエラーが表示されるため、開始するファイルの半分しか読み取っていません。

4

1 に答える 1

1

1.25GB のデータを読み取るのに約 18 秒かかります

約 70MB/s です。つまり、速度はおそらくディスク I/O パフォーマンスによって制限されます。

ファイル全体が必要ない場合。あなたが使用することができますnumpy.memmap

mat = np.memmap("path/to/file", shape=(4269,288,352,3))

メモリ エラーを回避するには、インプレース操作を使用します。

mat_new = mat1.transpose(0,2,3,1) # no data copying

また、@HYRYが言ったように、不要なものを削除してくださいnp.zeros()

于 2013-04-17T08:05:38.460 に答える