如何存储许多大型多维数组?

3

我有一个深度学习模型,生成了一个大小为2x2x4096的输出多维数组。 对于每个输入图像,都有40,000个这样的输出。 如何在Python中实现这一点? Hdf5格式似乎是一个有趣的方向。

有人可以指点一下我应该往哪个方向走吗?


你想节省空间吗?这取决于数据中存在的相关性。NetCDF实现了内置无损压缩的HDF5。https://pypi.python.org/pypi/netCDF4 - periphreal
空间不是问题。使用的便利性是首要考虑因素。 - curio17
1个回答

1
我建议使用PyTables与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)) ''

或者只通过名称:
print(h5_file.root.my_array0)

输出:

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

多维数组能用这个方法吗?请告诉我如何读取它。 - curio17

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接