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 | pickle.load | バイナリ | 非圧縮 | |
| numpy.ndarray.dumps | pickle.loads | バイナリ | 非ファイル保存 |
「numpy.save」で書き込んだndarrayは「numpy.load」で読み込むことができます。バイナリ形式で保存され、拡張子は「npy」である必要があります。
# -*- coding: utf-8 -*-
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]]
「numpy.savetxt」で書き込んだndarrayは「numpy.loadtxt」で読み込むことができます。テキスト形式で保存されますが、拡張子は特に問いません。「loadtxt」は第二引数のdtypeでデータ型を指定することができ、デフォルトはfloatです。
# -*- coding: utf-8 -*-
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]]
「numpy.savez」で書き込んだndarrayは「numpy.load」で読み込むことができます。バイナリ形式で保存され、拡張子は「npz」である必要があります。「savez」は複数の配列を書き込むことが可能ですが、それらの配列は可変長引数として渡すことができます。例のような形では「arr_0」や「arr_1」などのkeyで取得することができ、キーワード引数として渡した場合はそのキーワード名で取得することができます。
# -*- coding: utf-8 -*-
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]]
「numpy.savez_compressed」で書き込んだndarrayは「numpy.load」で読み込むことができます。バイナリ形式で保存され、拡張子は「npz」である必要があります。「savez_compressed」は複数の配列を書き込むことが可能ですが、それらの配列は可変長引数として渡すことができます。例のようにキーワード引数として渡した場合はそのキーワード名で取得することができます。
# -*- coding: utf-8 -*-
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]]
「numpy.ndarray.tofile」で書き込んだndarrayは「numpy.fromfile」で読み込むことができます。バイナリ形式で保存され、拡張子は問いません。「fromfile」は第二引数のdtypeでデータ型を指定することができ、デフォルトはfloatです。
# -*- coding: utf-8 -*-
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]
「numpy.ndarray.dump」で書き込んだndarrayは「pickle.load」で読み込むことができます。バイナリ形式で保存され、拡張子は問いません。
# -*- coding: utf-8 -*-
import numpy
import pickle
na = numpy.array([[1, 10, 100], [2, 20, 200]])
# 書き込み
na.dump('sample_6.dat')
# 読み込み
with open('sample_6.dat') as f:
print pickle.load(f)
--実行結果--
[[ 1 10 100] [ 2 20 200]]
これはファイル保存ではありませんが、同じような機能として紹介しておきます。「numpy.ndarray.dumps」で取得したバイナリ文字列は「pickle.loads」で読み込むことができます。
# -*- coding: utf-8 -*- import numpy import pickle na = numpy.array([[1, 10, 100], [2, 20, 200]]) # 配列のバイナリ文字列 na_dumps = na.dumps() # 読み込み print pickle.loads(na_dumps)
--実行結果--
[[ 1 10 100] [ 2 20 200]]
|
|
|
|
|
|
|
|
||
|
| |||
|
|
|
||
NumPyにもありますallとany!
