我有一个关于如何最好地使用python / h5py写入hdf5文件的问题。
我有类似的数据:
-----------------------------------------
| timepoint | voltage1 | voltage2 | ...
-----------------------------------------
| 178 | 10 | 12 | ...
-----------------------------------------
| 179 | 12 | 11 | ...
-----------------------------------------
| 185 | 9 | 12 | ...
-----------------------------------------
| 187 | 15 | 12 | ...
...
具有约10 ^ 4列和约10 ^ 7行。 (这大约是10 ^ 11(1000亿个)元素,或〜100GB(1字节整数)。
[使用此数据,通常的用途是一次写入,多次读取,并且典型的读取情况是获取列1和另一列(例如254),将这两列都加载到内存中,并进行一些统计”。 >
我认为一个好的hdf5结构将使上表中的每一列成为hdf5组,从而得到10 ^ 4组。这样,我们将不需要将所有数据读入内存,是吗? hdf5结构尚未定义,因此可以是任何东西。
现在的问题是:我一次接收到约10 ^ 4行的数据(并且每次接收的行数不完全相同),并且需要将其递增地写入hdf5文件。我该如何写文件?
我正在考虑使用python和h5py,但如果推荐的话,可以使用其他工具。正在大步前进,例如
dset = f.create_dataset("voltage284", (100000,), maxshape=(None,), dtype='i8', chunks=(10000,))
然后当另一个10 ^ 4行的块到达时,替换数据集?
或者仅将10 ^ 4行的每个块存储为单独的数据集会更好吗?还是我真的需要知道最终的行数? (很难获得,但是可能)。
我也可以对hdf5保释,如果它也不是正确的工作工具,尽管我认为一旦完成笨拙的写操作,它就会很棒。
我有一个关于如何最好地使用python / h5py写入hdf5文件的问题。我有类似的数据:----------------------------------------- |时间点|电压1 |电压2 | ... -------------------...
Per the FAQ,您可以使用dset.resize
展开数据集。例如,
正如@unutbu指出的,dset.resize
是一个很好的选择。查看pandas
及其HDF5支持可能会有用,这对于您的工作流程可能会很有用。听起来HDF5是满足您需求的合理选择,但使用顶部附加一层可能会更好地表达您的问题。