Я ищу быстрый способ сохранения больших массивов numpy. Я хочу сохранить их на диск в двоичном формате, а затем быстро переписать их в память. К сожалению, cPickle недостаточно быстро.
Я нашел numpy.savez и numpy.load. Но странно, что numpy.load загружает npy файл в "карту памяти". Это означает, что регулярное манипулирование массивами очень медленное. Например, что-то вроде этого будет очень медленным:
#!/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? В идеале я хочу иметь возможность хранить несколько массивов в одном файле.