LoginSignup
21
9

More than 5 years have passed since last update.

pickle vs npy

Last updated at Posted at 2018-08-01

やること

繰り返し同じデータを扱うとよくファイルに保存しておくが、.pickleと.npyのどっちを使うべきなのか深く考えたことがなかったので比較してみた。比較ポイントは読み込み/書き込み速度。

環境

python3.6(Anaconda)

比較するもの

  • pickle(protocol=4)
  • _pickle(protocol=4)
  • numpy with

比較

適当にndarrayの行列を作って保存して読み込んだ。np.saveは書き方がシンプル

データ作成
import numpy as np

data = np.random.rand(1000, 1000, 3, 500)
保存時間の計測
# numpy
start = time.time()
np.save('npsave', data)
print('numpy save:', time.time() - start)

# pickle
start = time.time()
with open('picklesave.pickle', mode='wb') as f:
    pickle.dump(data, f, protocol=4)
print('pickle save:', time.time() - start)

# _pickle
start = time.time()
with open('cpicklesave.pickle', mode='wb') as f:
    _pickle.dump(data, f, protocol=4)
print('_pickle save:', time.time() - start)
読み込み時間の計測
# numpy
start = time.time()
data = np.load('npsave.npy')
print('numpy load:', time.time() - start)

# pickle
start = time.time()
with open('picklesave.pickle', mode='rb') as f:
    data = pickle.load(f)
print('pickle load:', time.time() - start)

# _pickle
start = time.time()
with open('cpicklesave.pickle', mode='rb') as f:
    data = _pickle.load(f)
print('_pickle load:', time.time() - start)

結果

形式 書き込み時間 [s] 読み込み時間 [s]
numpy 104 113
pickle 154 175
_pickle 194 168

書き込みも読み込みもnumpyが最速だった。_pickleはpickleよりも優秀だと思ってたがそこまで変わりがなかった。
今まで_pickle使ってましたがこれからはnp.save()つかいます。

21
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
9