- Pythonを始めたばかりで基本から学びたい方
- Pythonの基本的な部分を速習してまずは全体像を把握しておきたい方
▶ Numpyの基本を解説しています。過去の記事はこちらからどうぞ。


はじめに
今回はndarrayの保存と読み込みについて基本から解説していきます。保存については何も難しいことはありませんが、保存したndarrayを読み込むときには注意が必要です。実際に例を示しながら丁寧に解説していきます。
ndarrayの保存
基本
np.save()でndarrayを保存することができます。書式を確認しておきましょう。
fileの部分はファイルパスを指定することもできます。また、拡張子「.npy」はつけてもつけなくても大丈夫です。(つけなければ自動的に補完されます)サンプルデータを作って保存してみましょう。
# ライブラリのインポート
import numpy as np
# サンプルデータの作成
np.random.seed(1)
sample_ndarray = np.random.randint(0,10,size=(3,4))
# データの確認
print('サンプルデータの確認')
print(sample_ndarray)
# データの保存
np.save('sample_data.npy',sample_ndarray)

簡単ですね。このコードを実行したフォルダ内に「sample_data.npy」というファイルが作成されます。
辞書として保存
np.save()は辞書の場合でも同様に保存することができます。ndarrayを辞書として保存するケースも見ておきましょう。
# 辞書のサンプルデータ作成
sample_dict = {
'id':'001',
'data':sample_ndarray
}
sample_dict

この辞書を保存する場合も同様の操作で可能です。
# 辞書データの保存
np.save('sample_dict.npy',sample_dict)
このコードを実行したフォルダ内に「sample_dict.npy」というファイルが作成されます。
ndarrayの読み込み
基本
次に保存したファイルの読み込みを見ていきましょう。ファイルの読み込みにはnp.load()を使います。次の書式となります。
先ほど保存したファイルを読み込んでみましょう。
# npyファイルの読み込み
loaded_sample_data = np.load('sample_data.npy')
loaded_sample_data

問題なく読み込むことができました。
辞書の読み込み
次に先ほど保存した辞書データの読み込みをしてみましょう。
# 辞書データの読み込み
loaded_sample_dic = np.load('sample_dict.npy')

今度はエラーになってしまいました。これは保存時にPythonのモジュールであるpickleを使用して配列情報を保存していることに起因しているようです。np.load()ではpickleに関するdefault値が「allow_pickle = False」となっているためエラーとなっているようです。ここを書き換えてみましょう。
# 辞書データの読み込み
loaded_sample_dic = np.load('sample_dict.npy',allow_pickle=True)
今度はエラーが出ませんね。ではこの読み込んだデータを確認してみましょう。
# 読み込んだ辞書データの確認
loaded_sample_dic

辞書を保存したはずですが、読み込んだデータはarrayになっていますね。これより辞書を取り出すにはitem()を使うか、あるいは[()]とします。
# item()を使う
loaded_sample_dic.item()

# [()]を使う
loaded_sample_dic[()]

うまくいきましたね。
まとめ
今回はndarrayの保存、および、読み込む方法を扱いました。ndarrayの保存はnp.save()を使います。np.save()は辞書型のデータも同様の方法で保存できます。一方、ファイルを読み込む際はnp.load()を使います。ndarrayが保存されたファイルは何も難しいことはなかったですね。辞書型データを読み込む場合には、保存時にpickleが使用されている場合はload時にallow_pickle=Trueを指定する必要があります。また、読み込んだデータはarrayになっているので、ここから辞書型を抽出するにはitem()や[()]を使います。
コメント