2015-07-29 1 views
0

Как вы храните разреженные NDArrays на диске в Python?Python HDF5 Редкие из базовых наборов данных

Я отвечаю на свой вопрос, потому что я потратил впустую почти неделю, пытаясь получить разреженные из основных матриц. Возможно, это очевидно для некоторых, но не для меня и, возможно, для другой бедной души!

ответ

0

Подтвержденный принятым ответом here, а затем проверенный с помощью наборов данных, составленный h5py, проработал следующий тест временных рядов.

>>> f = h5py.File('./test.h5') 
>>> d = f.create_dataset('test', (10000, 10000), chunks=(100, 100)) 
>>> f.flush() 
>>> d[1,1] = 1.0 
>>> f.flush() 
>>> d[2,1] = 1.0 
>>> f.flush() 
>>> d[2,100] = 1.0 
>>> f.flush() 
>>> d[2000,100] = 1.0 
>>> f.flush() 
>>> d[2000,1000] = 1.0 
>>> f.flush() 
>>> 

Ниже приведены размеры файлов, сообщенные Баш после каждой промывки

$ ls -lth test.h5 
-rw-rw-r-- 1 aidan aidan 1.4K Jul 28 18:51 test.h5 
$ ls -lth test.h5 
-rw-rw-r-- 1 aidan aidan 43K Jul 28 18:51 test.h5 
$ ls -lth test.h5 
-rw-rw-r-- 1 aidan aidan 43K Jul 28 18:52 test.h5 
$ ls -lth test.h5 
-rw-rw-r-- 1 aidan aidan 83K Jul 28 18:52 test.h5 
$ ls -lth test.h5 
-rw-rw-r-- 1 aidan aidan 122K Jul 28 18:52 test.h5 
$ ls -lth test.h5 
-rw-rw-r-- 1 aidan aidan 161K Jul 28 18:53 test.h5 
$ 

можно видеть, что файл только увеличивается в размерах с шагом 40kb (100x100 поплавки) и только когда компоновать элементы размер существующих кусков. Мы также можем пропустить и сделать только куски, которые необходимы (то есть не промежуточные куски)!

Magic!