8

私のプログラムでは、さまざまなサイズのさまざまなnumpy配列を扱っています。後で使用するために、それらを XML ファイルに保存する必要があります。それらをバイナリ ファイルに書き込まなかったので、すべてのデータが 1 か所 (XML ファイル) にあり、200 個のファイルに分散していません。

そこで、numpy の array_str() メソッドを使用して配列を文字列に変換しようとしました。結果の XML は次のようになります。

-<Test date="2013-07-10-17:19">
    <Neurons>5</Neurons>
    <Errors>[7.7642140551985428e-06, 7.7639131137987232e-06]</Errors>
    <Iterations>5000</Iterations>
    <Weights1>[[ 0.99845902 -0.70780512 0.26981375 -0.6077122 0.09639695] [ 0.61856711 -0.74684913 0.20099992 0.99725171 -0.41826754] [ 0.79964397 0.56620812 -0.64055346 -0.50572793 -0.50100635]]</Weights1>
    <Weights2>[[-0.1851452 -0.22036027] [ 0.19293429 -0.1374252 ] [-0.27638478 -0.38660974] [ 0.30441414 -0.01531598] [-0.02478953 0.01823584]]</Weights2>
</Test>

重みは、保存したい値です。問題は、numpy の fromstring() メソッドが明らかにこれらをリロードできないことです...「ValueError: 文字列サイズは要素サイズの倍数でなければなりません」というメッセージが表示されます

「np.array_str(w1)」で書き、「np.fromstring(w_str1)」で読み込もうとしました。どうやらうまく行っても結果は1D配列だけなので、手動で形状を復元する必要があります。うーん、これもなんとかして保管しなきゃいけないので、もう面倒くさい。

これを適切に行うための最良の方法は何ですか? できれば、すべての小さなことを手動でハウスキーピングすることなく、配列の形状とデータ型も保存するものです。

4

4 に答える 4

16

Numpy は、多数の配列を圧縮ファイルに保存する簡単な方法を提供します。

a = np.arange(10)
b = np.arange(10)
np.savez_compressed('file.npz', a=a, b=b)

たとえば、次のようにして、保存時に配列名を変更することもできますnp.savez_compressed('file.npz', newa=a, newb=b)

保存されたファイルを読み取るには、辞書のように機能np.load()するインスタンスを返す を使用します。NpzFile

loaded = np.load('file.npz')

配列をロードするには:

a_loaded = loaded['a']
b_loaded = loaded['b']

また:

from operator import itemgetter
g = itemgetter( 'a', 'b' )
a_loaded, b_loaded = g(np.load('file.npz'))
于 2013-07-10T15:47:24.483 に答える