2017-01-19 54 views
2

我有一個深度學習模型,可以生成2x2x4096大小的輸出多維數組。 然後,每個輸入圖像有40,000個這樣的輸出。 如何在python中做到這一點? Hdf5格式似乎是一個有趣的方向。如何存儲很多大型多維數組?

有人能指點我正確的方向嗎?

+0

你想節省空間嗎?這取決於數據中存在的相關性種類。 NetCDF實現了內置無損壓縮的HDF5。 https://pypi.python.org/pypi/netCDF4 – periphreal

+0

空間不是問題。易用性是重中之重。 – curio1729

回答

1

我會推薦使用HDF5和PyTables。把一個陣列到一個文件中一樣簡單的:

import numpy as np 
import tables 

a = np.arange(100) 
h5_file = tables.open_file('my_array.h5', mode='w', titel='many large arrays') 
h5_file.create_array('/', 'my_array', a) 
h5_file.close() 

用10個多維陣列的一個例子:

import numpy as np 
import tables 

my_arrays = [np.ones((2, 2, 4098)) for x in range(10)] 

h5_file = tables.open_file('my_array.h5', mode='w', titel='many large arrays') 

for n, arr in enumerate(my_arrays): 
    h5_file.create_array('/', 'my_array{}'.format(n), arr) 
h5_file.close() 

在看看文件結構與h5ls

h5ls my_array.h5 
my_array0    Dataset {2, 2, 4098} 
my_array1    Dataset {2, 2, 4098} 
my_array2    Dataset {2, 2, 4098} 
my_array3    Dataset {2, 2, 4098} 
my_array4    Dataset {2, 2, 4098} 
my_array5    Dataset {2, 2, 4098} 
my_array6    Dataset {2, 2, 4098} 
my_array7    Dataset {2, 2, 4098} 
my_array8    Dataset {2, 2, 4098} 
my_array9    Dataset {2, 2, 4098} 

讀取數據很容易。

閱讀全部:

import tables 

h5_file = tables.open_file('my_arrays.h5', mode='r') 

for node in h5_file: 

    print(node) 

輸出:

/ (RootGroup) '' 
/my_array0 (Array(2, 2, 4098)) '' 
/my_array1 (Array(2, 2, 4098)) '' 
/my_array2 (Array(2, 2, 4098)) '' 
/my_array3 (Array(2, 2, 4098)) '' 
/my_array4 (Array(2, 2, 4098)) '' 
/my_array5 (Array(2, 2, 4098)) '' 
/my_array6 (Array(2, 2, 4098)) '' 
/my_array7 (Array(2, 2, 4098)) '' 
/my_array8 (Array(2, 2, 4098)) '' 
/my_array9 (Array(2, 2, 4098)) '' 

或只是一個名字:

​​

輸出:

/my_array0 (Array(2, 2, 4098)) '' 
+0

多維數組(和其中許多)的工作?請告訴我如何閱讀它。 – curio1729

+0

是的,它的確如此。看到我更新的答案。 –

+0

如何通過數組名稱讀取它? – curio1729