Python入門から応用までの学習サイト


ndarrayのファイル保存

テキスト形式、バイナリ形式、拡張子の指定などをここでまとめておきます。

読み込み書き込み形式拡張子備考
numpy.savenumpy.loadバイナリnpy非圧縮
numpy.savetxtnumpy.loadtxtテキスト 非圧縮
numpy.saveznumpy.loadバイナリnpz非圧縮・複数
numpy.savez_compressednumpy.loadバイナリnpz圧縮・複数
numpy.ndarray.tofilenumpy.fromfileバイナリ 非圧縮
numpy.ndarray.dumppickle.loadバイナリ 非圧縮
numpy.ndarray.dumpspickle.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]]




Pythonによるデータ分析入門
NumPy、pandasを
使ったデータ処理


ゼロから作るDeep Learning
Pythonで学ぶディープラーニング
の理論と実装


科学技術計算のための
Python入門


Pythonから
はじめる数学入門

 
 
 

NumPyにもありますallとany!

▶数値解析:NumPyのallとany



確かな力が身につく
Python「超」入門




P  R