2017-03-12 2 views
1

は私が何回もするアレイnumpyの倍数を保存するためにループ内でnumpy.savezを使用したい、ここでは一例です:複数のnumpy配列を保存するために `numpy.savez`をループで使用する方法は?

import numpy as np 

a = np.array([1, 2, 3]) 
b = np.array([5, 6, 12]) 

for i in range(3): 
    np.savez("file_info", info1 = a, info2 = b) 
    print('a => ', a) 
    print('b => ', b) 
    a = a * 3 
    b = b * 2 

出力:

a => [1 2 3] 
b => [ 5 6 12] 
a => [3 6 9] 
b => [10 12 24] 
a => [ 9 18 27] 
b => [20 24 48] 

しかし、私は保存されたファイルを読み込むときに、

npzfile = np.load("file_info.npz") 
npzfile['info1'] 

私は最後の配列だけを取得します(各ループでコンテンツが削除されます):

array([ 9, 18, 27]) 

私の質問は、どのようにnumpyの配列をすべて同じファイルに保存できますか?

+1

異なる出力ファイルを使用することによって。または、1つのファイル内にすべてが必要な場合は、1つの大きなアレーをもう1つ外側のアレーで作成します。 – sascha

答えて

2

同じ名前の新しいファイルを保存すると、古いファイルが上書きされます。あなたのforループのうち保存しを取ることはありません理由:

import numpy as np 

a = np.array([1, 2, 3]) 
b = np.array([5, 6, 12]) 

save_info = np.zeros([3, 2, 3]) #array to store all the info 
#one dimension for each entry in a, one for as many arrays as you have 
#generating info, and one for the number of times you'll loop over it 

for i in range(3): #therefore i will be [0, 1, 2] 
    save_info[:, 0, i] = a #save from the a array 
    save_info[:, 1, i] = b #save from the b array 
    a = a * 3 
    b = b * 2 

np.savez("file_info", info1=save_info) #save outside for loop doesn't overwrite 

私はそのファイルから情報を読み取ることができます。

>>> import numpy as np 
>>> data = np.load("file_info.npz") #load file to data object 
>>> data["info1"] 
array([[[ 1., 3., 9.], 
     [ 5., 10., 20.]], 

     [[ 2., 6., 18.], 
     [ 6., 12., 24.]], 

     [[ 3., 9., 27.], 
     [ 12., 24., 48.]]]) 

編集: それとも、一つの大きな配列を作成する回避している場合

import numpy as np 

a = np.array([1, 2, 3]) 
b = np.array([5, 6, 12]) 

for i in range(3): #therefore i will be [0, 1, 2] 
    np.savez("file_info_"+str(i), info1=a, info2=b) 
    #will save to "file_info_0.npz" on first run 
    #will save to "file_info_1.npz" on second run 
    #will save to "file_info_2.npz" on third run 

    a = a * 3 
    b = b * 2 

編集:あなたはあなたがするたびにループを通るに保存しているファイルの名前を変更することができ 次の2つの小さなアレイ、AAのための1つを作ることを好むかもしれませんbのための1つ:

import numpy as np 

a = np.array([1, 2, 3]) 
b = np.array([5, 6, 12]) 

save_a = np.zeros([3, 3]) #array to store all the a runs 
save_b = np.zeros([3, 3]) #array to store all the b runs 

for i in range(3): #therefore i will be [0, 1, 2] 
    save_a[:, i] = a #save from the a array 
    save_b[:, i] = b #save from the b array 
    a = a * 3 
    b = b * 2 

np.savez("file_info", info1=save_a, info2=save_b) #save outside for loop doesn't overwrite 
+0

巨大なデータを扱っているので、すべての情報を格納するための配列を作成することは避けていました。 – Bilal

+0

別のファイルに保存できますか?例えば'np.savez(" file_info "+ str(i)、info1 = a、info2 = b)'? –

+0

まあ、もし私がそれをすれば、私は得るでしょう。私は多分5000ファイルを知らない、方法があるかどうか私は見るだろう。ありがとうございました。 – Bilal

関連する問題