numpy – ファイルの保存と読み込み

バイナリファイル

バイナリファイルとしての保存にはnp.save()、その読み込みにはnp.load()を使う。基本的なオプションは以下の通り。

numpy.save("ファイル名", 配列)
配列 = numpy.load("ファイル名")

注意点として、ファイルの拡張子は.npy固定。

  • saveのファイル名に拡張子をつけない場合、自動的に拡張子.npyが付加される
  • saveのファイル名に別の拡張子を書いても、その後ろに.npyが付加される
  • loadのファイル名の拡張子は.npyでなければならない(違う場合はFileNotFoundError)

テキストファイル

概要

テキストファイルとしての保存にはnp.savetxt()、その読み込みにはnp.loadtxt()を使う。扱える配列の次元は1次元か2次元のみ。基本的なオプションは以下の通り。

numpy.savetxt(
    fname,         # ファイル名を任意の拡張子まで指定
    X,             # 書き込む配列
    fmt='%.18e',   # 書き込む書式
    delimiter=' ', # 行内の数値の区切り
    newline='n',   # 改行文字
    header='',     # ヘッダー文字列
    footer='',     # フッター文字列
    comments='# ', # コメントの開始文字
    encoding=None  # エンコーディング
)

numpy.loadtxt(
    fname,                 # ファイル名(拡張子まで)
    dtype=<class 'float'>, # データの型
    comments='#',          # コメント開始文字
    delimiter=None,        # 区切り文字(デフォルトはスペース)
    converters=None,
    skiprows=0,            # ファイル先頭から指定した行数だけ読み飛ばす
    usecols=None,          # タプルで指定した列のみ読み込み
    unpack=False,
    ndmin=0,
    encoding='bytes'max_rows=None)

なお、numpy.ndarrayはすべての要素の型が同じでなければならず、リストやタプルのように要素の型を混在させることはできない

数値データ

数値データのみを扱う場合、整数でも自動的に実数型に変換されて読み込まれる。

実行例

このときのファイルの内容は以下のようになっている。

3次元以上の配列を書き込もうとするとエラー。

文字列

文字列データについては、書き込む場合はfmt="%s"、読み込む場合にはdtype="unicode"を指定。

このとき、text.txtファイルの中は以下のようになっている。

CSVファイルの読み込み

以下のようなCSVファイルを配列に読み込む。

numpy.arrayはすべての要素の型が同じである必要があるため、上記のように文字列と数値が混在したファイルを一つの配列に読み込もうとするとエラーになる。

都道府県名と2次元のデータを別々に読み込むことは可能。

読み込み時にUnicodeエラーが出た場合

ファイル読み込み時に以下のようなエラーが出た場合。

引数にencoding='utf8'を指定して回避。

その他のメソッド

savez()/load()
複数のファイルを非圧縮で扱う。
savez_compressed()/load()
複数のファイルを圧縮して扱う
ndarray.tofile()
配列のストレージへの書き込み。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です