NumPyによるndarrayのファイル読み込み、ファイル書き込み方法はさまざまです。
読み込み/書き込み関数(メソッド)対応表
テキスト形式、バイナリ形式、拡張子の指定などをここでまとめておきます。
書き込み | 読み込み | 形式 | 拡張子 | 備考 |
---|---|---|---|---|
numpy.save | numpy.load | バイナリ | npy | 非圧縮 |
numpy.savetxt | numpy.loadtxt | テキスト | 非圧縮 | |
numpy.savez | numpy.load | バイナリ | npz | 非圧縮・複数 |
numpy.savez_compressed | numpy.load | バイナリ | npz | 圧縮・複数 |
numpy.ndarray.tofile | numpy.fromfile | バイナリ | 非圧縮 | |
numpy.ndarray.dump | numpy.load | バイナリ | 非圧縮 | |
numpy.ndarray.dumps | numpy.loads | バイナリ | 非ファイル保存 |
save / load
numpy.saveで書き込んだndarrayはnumpy.loadで読み込むことができます。バイナリ形式で保存され、拡張子はnpyである必要があります。
import numpy na = numpy.array([[1, 10, 100], [2, 20, 200]]) # 書き込み numpy.save('sample_1.npy', na) # 読み込み print(numpy.load('sample_1.npy'))
[[ 1 10 100] [ 2 20 200]]
savetxt / loadtxt
numpy.savetxtで書き込んだndarrayはnumpy.loadtxtで読み込むことができます。テキスト形式で保存されますが、拡張子は特に問いません。loadtxtは第二引数のdtypeでデータ型を指定することができ、デフォルトはfloatです。
import numpy na = numpy.array([[1, 10, 100], [2, 20, 200]]) # 書き込み numpy.savetxt('sample_2.txt', na) # 読み込み print(numpy.loadtxt('sample_2.txt', numpy.int32))
[[ 1 10 100] [ 2 20 200]]
savez / load
numpy.savezで書き込んだndarrayはnumpy.loadで読み込むことができます。バイナリ形式で保存され、拡張子はnpzである必要があります。savezは複数の配列を書き込むことが可能ですが、それらの配列は可変長引数として渡すことができます。例のような形ではarr_0やarr_1などのkeyで取得することができ、キーワード引数として渡した場合はそのキーワード名で取得することができます。
import numpy na_1 = numpy.array([[1, 10, 100], [2, 20, 200]]) na_2 = numpy.array([[3, 30, 300], [4, 40, 400]]) # 複数の配列を1ファイルに書き込み(非圧縮) numpy.savez('sample_3.npz', na_1, na_2) # 読み込み loaded_array = numpy.load('sample_3.npz') print(loaded_array['arr_0']) print(loaded_array['arr_1'])
[[ 1 10 100] [ 2 20 200]] [[ 3 30 300] [ 4 40 400]]
savez_compressed / load
numpy.savez_compressedで書き込んだndarrayはnumpy.loadで読み込むことができます。バイナリ形式で保存され、拡張子はnpzである必要があります。savez_compressedは複数の配列を書き込むことが可能ですが、それらの配列は可変長引数として渡すことができます。例のようにキーワード引数として渡した場合はそのキーワード名で取得することができます。
import numpy na_1 = numpy.array([[1, 10, 100], [2, 20, 200]]) na_2 = numpy.array([[3, 30, 300], [4, 40, 400]]) # 複数の配列を1ファイルに書き込み(圧縮) numpy.savez_compressed('sample_4.npz', array_1=na_1, array_2=na_2) # 読み込み loaded_array = numpy.load('sample_4.npz') print(loaded_array['array_1']) print(loaded_array['array_2'])
[[ 1 10 100] [ 2 20 200]] [[ 3 30 300] [ 4 40 400]]
tofile / fromfile
numpy.ndarray.tofileで書き込んだndarrayはnumpy.fromfileで読み込むことができます。バイナリ形式で保存され、拡張子は問いません。fromfileは第二引数のdtypeでデータ型を指定することができ、デフォルトはfloatです。
import numpy na = numpy.array([[1, 10, 100], [2, 20, 200]]) # 書き込み na.tofile('sample_5.ary') # 読み込み print(numpy.fromfile('sample_5.ary', numpy.int32))
[ 1 10 100 2 20 200]
dump / pickle.load
numpy.ndarray.dumpで書き込んだndarrayはnumpy.loadで読み込むことができます。バイナリ形式で保存され、拡張子は問いません。
※pickle.loadでも読み込むことができます。
import numpy na = numpy.array([[1, 10, 100], [2, 20, 200]]) # 書き込み na.dump('sample_6.dat') # 読み込み with open('sample_6.dat', 'rb') as f: print(numpy.load(f))
[[ 1 10 100] [ 2 20 200]]
dumps / pickle.loads
これはファイル保存ではありませんが、同じような機能として紹介しておきます。numpy.ndarray.dumpsで取得したバイナリ文字列はnumpy.loadsで読み込むことができます。
※pickle.loadsでも読み込むことができます。
import numpy na = numpy.array([[1, 10, 100], [2, 20, 200]]) # 配列のバイナリ文字列 na_dumps = na.dumps() # 読み込み print(numpy.loads(na_dumps))
[[ 1 10 100] [ 2 20 200]]