2016-09-30 4 views
0

私は反復的に生成する数多くの配列を持っています。私はファイルに各配列を保存したい。次に、次の配列を生成してファイルに追加します(もし私がそれを1つ行ったなら、あまりにも多くのメモリを使います)。どのようにして最善を尽くすのですか?例えば私たちのような貧弱な機能を作り出す方法はありますか? numpy.savetxt? (私は、その関数のappendオプションを見つけることができませんでした。)1D numpy配列を新しい行に新しい要素を含むファイルに追加します。

私の現在のコードは次のとおりです。

with open('paths.dat','w') as output: 
    for i in range(len(hist[0])): 
     amount = hist[0][i].astype(int) 
     array = hist[1][i] * np.ones(amount) 
     for value in array: 
      output.write(str(value)+'\n') 
+0

Pythonの組み込みファイルの読み書きはこれを達成しませんでしたか? – lucasnadalutti

+0

もちろん、私はそれをやるより効率的な方法があるのだろうかと思います。私の投稿を編集しています。 –

+0

@ P-M同じファイルに保存するのはなぜ重要なのですか? – MZHm

答えて

1

あなたはsavetxt

に開いているファイル(ハンドル)を渡すことができます
with open('paths.dat','w') as output: 
    for i in range(len(hist[0])): 
     amount = hist[0][i].astype(int) 
     myArray = hist[1][i] * np.ones(amount) 
     np.savetxt(output, myArray, delimiter=',', fmt='%10f') 

np.savetxtは、ファイル名を指定するとファイルを開き、それ以外の場合はファイルを使用します。その後

配列の行に反復し、それらをfmtはあなたが与える文字列、またはあなたの配列の列数と一致するように複製されるものである

for row in myArray: 
    f.write(fmt % tuple(row)) 

を書き込みます。

0

私はHDF5を使用することをお勧めします。彼らはIOのために非常に高速です。ここ はあなたのデータを書き込む方法です:

import numpy as np 
import tables 

fname = 'myOutput.h5' 
length = 100 # your data length 
my_data_generator = xrange(length) # Your data comes here instead of the xrange 

filters = tables.Filters(complib='blosc', complevel=5) # you could change these 
h5file = tables.open_file(fname, mode='w', title='yourTitle', filters=filters) 
group = h5file.create_group(h5file.root, 'MyData', 'MyData') 
x_atom = tables.Float32Atom() 

x = h5file.create_carray(group, 'X', atom=x_atom, title='myTitle', 
         shape=(length,), filters=filters) 

# this is a basic example. It will be faster if you write it in larger chunks in your real code 
# like x[start1:end1] = elements[start2:end2] 
for element_i, element in enumerate(my_data_generator): 
    x[element_i] = element 
    h5file.flush() 

h5file.close() 

それが使用読みについて:

h5file = tables.open_file(fname, mode='r') 
x = h5file.get_node('/MyData/X') 
print x[:10] 

結果:

marray([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.], dtype=float32) 
関連する問題