1. ホーム
  2. python

[解決済み] ディスク上のnumpy配列を保存する最良の方法

2022-04-27 02:53:13

質問

私は大きなnumpy配列を保存する高速な方法を探しています。私はそれらをバイナリ形式でディスクに保存し、それらを比較的高速にメモリに読み戻すことを望んでいます。

私が見つけたのは numpy.savez numpy.load . しかし、奇妙なことに、numpy.loadはnpyファイルを"memory-map"にロードします。これは、通常の配列の操作が本当に遅くなることを意味します。例えば、以下のようなものは本当に遅いでしょう。

#!/usr/bin/python
import numpy as np;
import time; 
from tempfile import TemporaryFile

n = 10000000;

a = np.arange(n)
b = np.arange(n) * 10
c = np.arange(n) * -0.5

file = TemporaryFile()
np.savez(file,a = a, b = b, c = c);

file.seek(0)
t = time.time()
z = np.load(file)
print "loading time = ", time.time() - t

t = time.time()
aa = z['a']
bb = z['b']
cc = z['c']
print "assigning time = ", time.time() - t;

より正確には、最初の行はとても速いのですが、配列を obj はとんでもなく遅いです。

loading time =  0.000220775604248
assining time =  2.72940087318

numpyの配列を保存する良い方法はないでしょうか?理想的には、1つのファイルに複数の配列を保存できるようにしたいです。

どのように解決するのですか?

私は、大きなnumpyの配列を保存するためにhdf5を愛用しています。pythonでhdf5を扱うには2つのオプションがあります。

http://www.pytables.org/

http://www.h5py.org/

どちらもnumpyの配列を効率的に扱うように設計されています。