ndarrayのファイル保存

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_0arr_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]]