草庐IT

c++ - 在 C++ 中打开 HDF5 文件的更好方法

我一直在尝试想出一种方法来解决HDF5C++绑定(bind)的一些缺点。目前,我的代码中充斥着类似于以下内容的try/catchblock:H5::Exception::dontPrint();H5::H5File*file=NULL;try{file=newH5::H5File(fname.c_str(),H5F_ACC_RDWR);}catch(H5::FileIException&file_exists_err){file=newH5::H5File(fname.c_str(),H5F_ACC_TRUNC);}这不是必需的-我想要做的就是打开一个文件进行读/写访问,如果它不存在,

c++ - HDF5 C++ 接口(interface) : writing dynamic 2D arrays

我正在使用HDF5C++API编写二维数组数据集文件。HDF集团有anexampletocreate来自静态定义数组大小的HDF5文件,我已对其进行修改以满足下面的需求。但是,我需要一个动态数组,其中NX和NY都是在运行时确定的。我找到了anothersolutiontocreate2Darraysusingthe"new"keyword帮助创建一个动态数组。这是我所拥有的:#include"StdAfx.h"#include"H5Cpp.h"usingnamespaceH5;constH5std_stringFILE_NAME("C:\\SDS.h5");constH5std_str

python - 使用 h5py 将光栅图像添加到 HDF5 文件

如果这是一个新手问题,我深表歉意,但我对Python和HDF5还很陌生。我正在使用h5py、numpy和Python2.7。我有来自各种文件的数据需要导入到一个HDF5文件中。每个文件的数据将存储在不同的组中。这些组中的每一个都需要包含1)来自文件的原始数据作为mxn矩阵和2)从归一化原始数据生成的图像栅格。我能够完成第1部分,并且能够规范化数据,但我无法将此规范化数据写入光栅图像,因为我不知道如何将光栅图像添加到组中。似乎应该有一种简单、直接的方法来做到这一点,但我已经阅读了文档,但没有找到。如何在h5py中执行此操作,如果无法使用h5py完成,我应该使用什么来完成此操作?谢谢!!

python - 在不删除其他组和数据集的情况下将更多数据集附加到现有 Hdf5 文件中

我有一个HDF5文件,其中包含组和子组,其中有数据集。我想打开文件并将一些数据集添加到组中。我采用了以下在python中非常简单的方法。importh5pyf=h5py.File('filename.h5','w')f.create_dataset('/Group1/subgroup1/dataset4',data=pngfile)f.close()之前的文件是这样的修改后的文件是这样的但我希望它不删除其他数据集和组,而只是将dataset4添加到行中。 最佳答案 就像Pythonopen()函数一样,'w'将截断任何现有文件。使用

python - 如何读取一个 hdf5 数据文件中的批处理进行训练?

我有一个大小为(21760,1,33,33)的hdf5训练数据集。21760是训练样本的总数。我想使用大小为128的小批量训练数据来训练网络。我想问:如何使用tensorflow每次从整个数据集中提供128mini-batch训练数据? 最佳答案 如果你的数据集太大以至于无法像keveman建议的那样导入内存,你可以直接使用h5py对象:importh5pyimporttensorflowastfdata=h5py.File('myfile.h5py','r')data_size=data['data_set'].shape[0]b

python - 为什么读取整个 hdf5 数据集比读取切片更快

我想弄清楚为什么会这样:In[1]:importtime,h5pyash5In[2]:f=h5.File('myfile.hdf5','r')In[3]:st=time.time();data=f["data"].value[0,:,1,...];elapsed=time.time()-st;In[4]:elapsedOut[4]:11.127676010131836In[5]:st=time.time();data=f["data"][0,:,1,...];elapsed2=time.time()-st;In[6]:elapsed2Out[6]:59.810582399368286I

python - 用于 Python 的 HDF5 : high level vs low level interfaces. h5py

我一直在使用C和Matlab处理HDF5文件,两者都使用相同的方式读取和写入数据集:用h5f打开文件用h5d打开数据集用h5s选择空间等等……但现在我正在使用Python,通过它的h5py库,我看到它有两种管理HDF5的方法:高级接口(interface)和低级接口(interface).对于前者,从文件的单个变量获取信息所需的代码行更少。使用高级接口(interface)时是否有明显的性能损失?例如,当处理一个包含很多变量的文件时,我们必须只读取其中一个。 最佳答案 高级接口(interface)通常会带来某种性能损失。之后,它是

python - 从 hdf 文件中获取列名(标题)

我想知道如何获取hdf文件的列名(似乎存储在hdfheader中);例如,一个文件可能有名为[a,b,c,d]的列,而另一个文件有[a,b,c]列,而另一个文件有[b,e,r,z]列;我想找出哪些有哪些。非常感谢任何帮助! 最佳答案 要在python之外执行此操作,您可以使用h5dump通过像h5dump--headermy.hdf5这样的东西在python中你可以使用h5py例如,这是我访问HDF-EOS5文件的字段名称的方式:>>>importh5py>>>f=h5py.File('/tmp/temp.hdf','r')>>>f

python - Pytables/Pandas : Combining (reading? ) 多个 HDF5 存储按行拆分

在“一次写入,多次读取”工作流程中,我经常使用FastExport实用程序解析从Teradata转储的大型文本文件(20GB-60GB),并使用Pandas将它们加载到Pytables中。我正在使用multiprocessing对文本文件进行分block并将它们分发到不同的进程以编写一个.H5文件,该文件根据行数拆分,每个文件大约5MM,以支持并行写入。与写入25MM行x64列的单个hdf5文件的两个22分钟相比,并行写入多个hdf5文件大约需要12分钟。%timeit-n1write_single_hdf_multiprocess()1loops,bestof3:22min42spe

python - 在不加载到内存的情况下将 HDF5 转换为 Parquet

我有一个存储为HDF5格式的大型数据集(约600GB)。由于这太大而不适合内存,我想将其转换为Parquet格式并使用pySpark执行一些基本数据预处理(规范化、查找相关矩阵等)。但是,我不确定如何在不将其加载到内存的情况下将整个数据集转换为Parquet。我看了这个要点:https://gist.github.com/jiffyclub/905bf5e8bf17ec59ab8f#file-hdf_to_parquet-py,但似乎正在将整个数据集读入内存。我想到的一件事是分block读取HDF5文件并将其增量保存到Parquet文件中:test_store=pd.HDFStore(