このエラーは、numpy.load()
関数を使用してオブジェクト配列をロードしようとするときに発生します。具体的には、allow_pickle
引数がFalse
に設定されている場合に発生します。
原因
このエラーの原因は、numpy v1.16.3
以降でnumpy.load()
関数の挙動が変更されたことです。具体的には、allow_pickle
オプションの省略時のデフォルト値がTrue
からFalse
に変更されました。
解決法
このエラーを解決するためには、以下の2つの方法があります。
方法1: numpy 1.16.2
をインストールする
numpy
のバージョンが1.16.2
よりも新しい場合、allow_pickle
のデフォルト値はFalse
になります。そのため、numpy 1.16.2
をインストールすることでこのエラーを解決することができます。以下のようにnumpy 1.16.2
をインストールします。
pip install --force-reinstall numpy==1.16.2
方法2: np.load()
でallow_pickle=True
を設定する
np.load()
を使用する際にallow_pickle=True
を設定することで、このエラーを解決することができます。以下のように設定します。
np.load('/path/to/file.npy', allow_pickle=True)
ただし、信頼できないファイルに対してnp.load(allow_pickle=True)
を実行すると、任意のコードを実行できてしまう可能性があるため、注意が必要です。この問題については、Pythonオブジェクトが含まれたnumpy
行列(をシリアライズしたファイル)をnp.load()
によってデシリアライズする際に、悪意のあるコードを実行できてしまうという脆弱性が報告されています。
以上が、Python: ValueError: Object arrays cannot be loaded when allow_pickle=False
エラーの解決法になります。この情報が皆さんのお役に立てば幸いです。