3

私は pypy を使用しているときに numpy 配列をファイルに保存する最良の方法を試してきました (これは、サポートされていないため、明らかな などを使用できないことを意味しますnumpy.save) numpy.savetxt。Pickle モジュール (pypy で動作) を使用してみましたが、Pickle ではデータのリストしか保存できません。を使用できますがarray.tolist()、1D numpy 配列から離れると複雑になります。

Struct モジュールを使用して numpy 配列を保存およびロードできることは知っていますが、問題に対処する方法がわかりません。オンラインの情報はほとんどないようです。

役立つヒント/チュートリアルは非常に役立ちます!

4

1 に答える 1

0

構造体を使用すると、データの配列全体をディスクに非常に簡単にダンプまたは読み取ることができますが、メタデータ、つまり、書き込まれたアイテムの数、各アイテムのサイズ、配列の形状などを保存する方法を理解する必要があります...

たとえば、配列は常に uint32 で構成されているとします。このような配列arrを指定すると、次のように記述できます。

f = open(filename, 'wb')
f.write(struct.pack('I', arr.ndim))
f.write(struct.pack('I' * arr.ndim, *arr.shape))
size = reduce(lambda x, y: x*y, arr.shape)
f.write(struct.pack('I' * size, *arr.ravel()))

そして、あなたはそれを次のように読むことができます

f = open(filename, 'rb')
ndim = struct.unpack('I', f.read(4))[0]
shape = tuple(struct.unpack('I' * ndim, f.read(4 * ndim)))
size = reduce(lambda x, y: x*y, shape)
arr = np.array(struct.unpack('I' * size, f.read(4 * size)).reshape(shape)

データ型、データのエンディアンをコーディングするためのより複雑なスキームを考え出すことができます...

また、それらがシステムで機能する場合、配列全体の実際のダンプにnumpy.fromfilenumpy.tofileを使用すると非常に便利です。

于 2012-12-11T01:45:01.833 に答える