我有一個深度學習模型,可以生成2x2x4096大小的輸出多維數組。 然後,每個輸入圖像有40,000個這樣的輸出。 如何在python中做到這一點? Hdf5格式似乎是一個有趣的方向。如何存儲很多大型多維數組?
有人能指點我正確的方向嗎?
我有一個深度學習模型,可以生成2x2x4096大小的輸出多維數組。 然後,每個輸入圖像有40,000個這樣的輸出。 如何在python中做到這一點? Hdf5格式似乎是一個有趣的方向。如何存儲很多大型多維數組?
有人能指點我正確的方向嗎?
我會推薦使用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)) ''
你想節省空間嗎?這取決於數據中存在的相關性種類。 NetCDF實現了內置無損壓縮的HDF5。 https://pypi.python.org/pypi/netCDF4 – periphreal
空間不是問題。易用性是重中之重。 – curio1729