лучший способ сохранить массивы numpy на диске

Я ищу быстрый способ сохранить большие массивы 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? В идеале я хочу иметь возможность хранить несколько массивов в одном файле.

115
задан maazza 1 February 2016 в 16:00
поделиться