How to write large multiple arrays to a h5 file in layers?(如何在h5文件中分层写入大的多个数组?)
本文介绍了如何在h5文件中分层写入大的多个数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有10000个系统。对于每个系统,我都有两个数据集:对于每个数据集,我都有x、y和y_err数组。如何使用h5py
或pandas
将所有系统的数据放到一个h5文件中?下面给出了详细说明。
Systems=np.arange(10000)
for sys in Systems:
x1,y1,y1_err=np.random.rand(100),np.random.rand(100),np.random.rand(100)
x2,y2,y2_err=np.random.rand(200),np.random.rand(200),np.random.rand(200)
我想以结构化方式将所有系统的x1,y1,y1_err,x2,y2,y2_err
放入一个h5文件。
抱歉,这可能是非常基本的任务,但我真的很努力。
HDF5
创建推荐答案文件的另外两种方法是h5py和PyTables包。它们是相似的,但都有独特的优势。两者我都喜欢的地方是:当您使用HDFView打开HDF5文件时,您可以在简单的表格布局(如电子表格)中查看数据。
我为每个人都写了一个例子。只有2个函数不同:1)使用create_group()
创建组和使用h5pycreate_dataset
创建数据集与使用PyTablescreate_table
创建数据集。两者都使用数字重数组来命名数据列(也称为x1,y1,y1_err
)。如果您不想给列命名,并且所有数据都是同一类型(例如,全部为浮点型或全部为整型),则该过程会稍微简单一些。
h5py的流程如下:
import h5py
import numpy as np
table1_dt = np.dtype([('x1',float), ('y1',float), ('y1_err',float),])
table2_dt = np.dtype([('x2',float), ('y2',float), ('y2_err',float),])
Systems=np.arange(10_000)
with h5py.File('SO_71335363.h5','w') as h5f:
for sys in Systems:
grp = h5f.create_group(f'System_{sys:05}')
x1,y1,y1_err=np.random.rand(100),np.random.rand(100),np.random.rand(100)
t1_arr = np.empty(dtype=table1_dt,shape=(x1.shape[0],))
t1_arr['x1'] = x1
t1_arr['y1'] = y1
t1_arr['y1_err'] = y1_err
grp.create_dataset('table1',data=t1_arr)
x2,y2,y2_err=np.random.rand(200),np.random.rand(200),np.random.rand(200)
t2_arr = np.empty(dtype=table2_dt,shape=(x2.shape[0],))
t2_arr['x2'] = x2
t2_arr['y2'] = y2
t2_arr['y2_err'] = y2_err
grp.create_dataset('table2',data=t2_arr)
以下是与PyTables相同的过程(Package isimport tables
):
import tables as tb # (this is PyTables)
import numpy as np
table1_dt = np.dtype([('x1',float), ('y1',float), ('y1_err',float),])
table2_dt = np.dtype([('x2',float), ('y2',float), ('y2_err',float),])
Systems=np.arange(10_000)
with tb.File('SO_71335363_tb.h5','w') as h5f:
for sys in Systems:
grp = h5f.create_group('/',f'System_{sys:05}')
x1,y1,y1_err=np.random.rand(100),np.random.rand(100),np.random.rand(100)
t1_arr = np.empty(dtype=table1_dt,shape=(x1.shape[0],))
t1_arr['x1'] = x1
t1_arr['y1'] = y1
t1_arr['y1_err'] = y1_err
h5f.create_table(grp,'table1',obj=t1_arr)
x2,y2,y2_err=np.random.rand(200),np.random.rand(200),np.random.rand(200)
t2_arr = np.empty(dtype=table2_dt,shape=(x2.shape[0],))
t2_arr['x2'] = x2
t2_arr['y2'] = y2
t2_arr['y2_err'] = y2_err
h5f.create_table(grp,'table2',obj=t2_arr)
这篇关于如何在h5文件中分层写入大的多个数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在h5文件中分层写入大的多个数组?
基础教程推荐
猜你喜欢
- 如何防止Groupby超越指数? 2022-09-22
- 如何在hdf5文件的多个组之间拆分数据? 2022-09-21
- 如何将RPC与Volttron配合使用 2022-09-21
- Python h5py-为什么我收到广播错误? 2022-09-21
- 跟在带量词的前瞻后面有什么作用? 2022-09-22
- 从顶点坐标创建三角网格 2022-09-21
- 在OpenCV中放大后,Python会捕捉图像的特定部分 2022-09-22
- 使用工作区API导入方法导入数据库笔记本(动态内 2022-09-21
- 在 pandas 中使用带有多重索引的.loc 2022-09-22
- 获取多索引中某个级别的最后一个元素 2022-09-22