Python 2.7 如何存储多个大型多维数组?
我有一个深度学习模型,它生成一个大小为2x2x4096的输出多维数组。 然后每个输入图像有40000个这样的输出。 如何在python中实现这一点? Hdf5格式似乎是一个有趣的方向Python 2.7 如何存储多个大型多维数组?,python-2.7,multidimensional-array,storage,Python 2.7,Multidimensional Array,Storage,我有一个深度学习模型,它生成一个大小为2x2x4096的输出多维数组。 然后每个输入图像有40000个这样的输出。 如何在python中实现这一点? Hdf5格式似乎是一个有趣的方向 有人能给我指出正确的方向吗?我建议使用HDF5。将数组放入文件非常简单,如下所示: import numpy as np import tables a = np.arange(100) h5_file = tables.open_file('my_array.h5', mode='w', titel='many
有人能给我指出正确的方向吗?我建议使用HDF5。将数组放入文件非常简单,如下所示:
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)) ''
或者只是一个名字:
print(h5_file.root.my_array0)
输出:
/ (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。空间不是问题。易用性是优先考虑的。多维数组(很多)能用吗?。请告诉我怎么读。