我收到带有大型数据集(有几千列)的 h5 文件。我使用 h5py 将这些数据集导出为 CSV,然后我必须将其切成最多 500 列的子矩阵才能分析它们。
如何继续(使用 h5py?)将数据直接导出到多个具有定义列数的 CSV 文件中?
目前我用 C# 程序剪切这些大型 CSV 文件,但这非常耗时并且增加了不必要的额外工作。
这是一个简单的示例,它创建一个包含字段/列名称的 H5 文件,然后读取切片(按字段名称和行索引)。
n_fields, n_rows = 10, 100
name_list = [f'Field_{i:02}' for i in range(1,n_fields+1) ]
format_list = ['float' for _ in range(n_fields)]
ds_dt = np.dtype({'names':name_list, 'formats':format_list})
with h5py.File('SO_77378785.h5','w') as h5f:
ds = h5f.create_dataset('test',shape=(n_rows,),dtype=ds_dt)
for i in range(n_fields):
ds[name_list[i]] = np.random.random(n_rows)
# Open file and read slices
with h5py.File('SO_77378785.h5') as h5f:
ds = h5f['test'] # creates dataset object for reference
field_1_slice = ds['Field_01'] # reads slice from dataset object
print(field_1_slice.shape)
field_2_slice = h5f['test']['Field_01'] # another way to slice
print(field_2_slice.shape)
row_slice = h5f['test']['Field_10'][:50]
print(row_slice.shape)