NumPy IO
Numpy はディスク上のテキストデータまたはバイナリデータを読み書きできます。
NumPy は ndarray オブジェクト用に単純なファイル形式を導入しています:npy。
npy ファイルは、ndarray の再構築に必要なデータ、形状、dtype、およびその他の情報を格納するために使用されます。
よく使われる IO 関数は次のとおりです:
- load() と save() 関数は、ファイルに対して配列データを読み書きするための2つの主要な関数です。デフォルトでは、配列は未圧縮の生バイナリ形式で、拡張子 .npy のファイルに保存されます。
- savez() 関数は複数の配列をファイルに書き込むために使用されます。デフォルトでは、配列は未圧縮の生バイナリ形式で、拡張子 .npz のファイルに保存されます。
- loadtxt() と savetxt() 関数は、通常のテキストファイル(.txt など)を処理します。
numpy.save()
numpy.save() 関数は、配列を拡張子 .npy のファイルに保存します。
numpy.save(file, arr, allow_pickle=True, fix_imports=True)
引数の説明:
- file:保存するファイル。拡張子は .npy です。ファイルパスの末尾に拡張子 .npy がない場合、この拡張子が自動的に追加されます。
- arr: 保存する配列
- allow_pickle: オプション、ブール値。Python の pickle を使用してオブジェクト配列を保存することを許可します。Python の pickle は、オブジェクトをディスクファイルに保存する前、またはディスクファイルから読み取る前に、オブジェクトをシリアライズおよびデシリアライズするために使用されます。
- fix_imports: オプション。Python3 で保存されたデータを Python2 で読み取る際の便宜のためです。
例
import numpy as np
a = np.array([1,2,3,4,5])
# outfile.npy ファイルに保存します
np.save('outfile.npy',a)
# outfile2.npy ファイルに保存します。ファイルパスの末尾に拡張子 .npy がない場合、この拡張子が自動的に追加されます
np.save('outfile2',a)
ファイルの内容を確認できます:
$ cat outfile.npy
?NUMPYv{'descr': '<i8', 'fortran_order': False, 'shape': (5,), }
$ cat outfile2.npy
?NUMPYv{'descr': '<i8', 'fortran_order': False, 'shape': (5,), }
ファイルが文字化けしていることがわかります。これは、Numpy 専用のバイナリ形式のデータだからです。
load() 関数を使用してデータを読み込むと、正常に表示できます:
例
import numpy as np
b = np.load('outfile.npy')
print (b)
出力結果は次のとおりです:
[1 2 3 4 5]
np.savez
numpy.savez() 関数は、複数の配列を拡張子 npz のファイルに保存します。
numpy.savez(file, *args, **kwds)
引数の説明:
- file:保存するファイル。拡張子は.npz、ファイルパスの末尾に拡張子がない場合.npz、その拡張子が自動的に追加されます。
- args: 保存する配列。キーワード引数を使用して配列に名前を付けることができます。非キーワード引数で渡された配列には自動的に名前が付けられます。arr_0, arr_1, … 。
- kwds: 保存する配列にはキーワード名を使用します。
例
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.arange(0, 1.0, 0.1)
c = np.sin(b)
# c はキーワード引数 sin_array を使用
np.savez("サンプル.npz", a, b, sin_array = c)
r = np.load("サンプル.npz")
print(r.files) # 各配列の名前を確認
print(r["arr_0"]) # 配列 a
print(r["arr_1"]) # 配列 b
print(r["sin_array"]) # 配列 c
出力結果は次のとおりです:
['sin_array', 'arr_0', 'arr_1'] [[1 2 3] [4 5 6]] [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9] [0. 0.09983342 0.19866933 0.29552021 0.38941834 0.47942554 0.56464247 0.64421769 0.71735609 0.78332691]
savetxt()
savetxt() 関数は、データを単純なテキストファイル形式で保存します。データを取得するには、対応する loadtxt() 関数を使用します。
np.loadtxt(FILENAME, dtype=int, delimiter=' ') np.savetxt(FILENAME, a, fmt="%d", delimiter=",")
パラメータ delimiter は、さまざまな区切り文字、特定の列に対するコンバーター関数、スキップする行数などを指定できます。
例
import numpy as np
a = np.array([1,2,3,4,5])
np.savetxt('out.txt',a)
b = np.loadtxt('out.txt')
print(b)
出力結果は次のとおりです:
[1. 2. 3. 4. 5.]
delimiter パラメータを使用する:
例
import numpy as np
a=np.arange(0,10,0.5).reshape(4,-1)
np.savetxt("out.txt",a,fmt="%d",delimiter=",") # 整数として保存するように変更し、カンマで区切る
b = np.loadtxt("out.txt",delimiter=",") # load 時もカンマ区切りを指定する
print(b)
出力結果は次のとおりです:
[[0. 0. 1. 1. 2.] [2. 3. 3. 4. 4.] [5. 5. 6. 6. 7.] [7. 8. 8. 9. 9.]]その他の拡張