官方介绍链接: HDF5
通俗败雹地来说,HDF5HDF5 是一种灵活的文件储存格式,可以存储不同类型的图像和数码数据,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库。
三代测序下机的原始猛腊数据不再是fastq格式了,而是换成了hdf5 格式.
HDF5 文件一般以 .h5 或者 .hdf5 作为后缀名,需要专门的软件才能打开预览文件的内容。HDF5 文件结构中有 2 primary objects: Groups 和 Datasets。
dataset 代表数据集,一个文件当中可以存放不同种类的数据集,这些数据集如何管理,就用到了group最直观的理解,可以参考我们的文件管理系统,不同的文件位于不同的目录下。目录就是hdf5中的group, 描述了数据集dataset的分类信息,通过group 有效的将多种dataset 进行管理和区分;文件就是hdf5中dataset, 表示的是具体的数据。
每个 dataset 可以分成两部分: 原始数据 (raw) data values 和 元数据 metadata (存储数据集对应的属性信息的集合)。
需要安装包 hdf5r
人生苦短,察知帆一起学习叭。
https://www.cnblogs.com/xudongliang/p/6907733.html
https://nbisweden.github.io/workshop-scRNAseq/labs/compiled/seurat/seurat_01_qc.html#Get_data
在使用Matlab对数据进行预处理时,遇到了内存不足的问题,因为数据量太大,在处理完成以前内存已经爆满。如果使用Matlab的 .m 文件对文件进行存储的话,则需要将数据分割成多个文件,对后续的处理造成了不便。HDF5文件则是一种灵活的文件存储格式,有一个最大的好处就是在Matlab的处理过程中可以对它进行扩展写入,也就是说不是所有数据处理完以后一次写入,而是边处理边写入,极大的降低了对系统内存的要求。
HDF5文件类似与一个文件系统,使用这个文件本身就可以对数据集(dataset)进行管理。例如下图所示,HDF5文件中的数据集皆存储根目录 / ,在根目录下存在多个 group ,这样一些 group 类似与文件系统的文件夹,在它们可以存储别的 group ,也可以存储数据集。
使用Matlab创建HDF5文件的函数是 h5create ,使用如下:
filename 为 h5 文件的文件名(不知道什么问题,在我的电脑上使用时,这个函数无法指定路径)。
datasetname 则为数据集的名字,数据集名称必须以 / 开头,比如 /G 。
[30,30,3,inf] 位数据集的大小,比如我的数据集为 30x30 大小的彩色图像,并且我希望数量能够扩展,那么就可以指定最后以为度为inf,以表示数量不限。
Datatype 为数据类型
ChunkSize 为数据存储的最小分块,为了让数据能够具有扩展性,所以为新来的数据分配一定的空间大小,对于一个非常大的数据,这个值设置大一点比较好,这样分块就会少一点。比如我的数据集中, 30x30 大小的彩色图像大概有10万个左右,那么1000个存储银枣拆在一起较为合适,则 chunksize 设置为:[30,30,3,1000]。
在创建了hdf5文件和数据集以后,则可以对数据集进行写 *** 作以扩展里面的数据。使用Matlab写入HDF5文件的函数是 h5write ,使用如下:
fileName : hdf5文件名
datasetName :数据集名称,比如 /G
data :需要写入的数据,数据的维度应该与创建时一致,比如,设置的数据集大小为 [30,30,3,inf] ,那么这里的 data 的前三个维度就应该是 [30, 30, 3] ,而最后一个维度则是自由的
start :数据存储的起点,如果是第一次存,则应该为 [1, 1, 1, 1] (注意数据维度的一致性),如果这次存了10000个样本,也就是[30,30,3,10000],那么第二次存储的时候起点就应该为[1,1,1,10001]
count 存储数据的个数,同样要根据维度来(其实就是数据的维度),这里为[30,30,3,10000]
Matlab中可以使用 h5info 函数来读取HDF5文件的信息:
然后通过解析fileInfo结构,则可以得到岩则HDF5文件中的数据集名称、数据集大小等等必要信息。
Matlab中可以使用 h5read 函数来读取HDF5文件:锋枣
filename :HDF5文件文件名
datasetname :数据集名称
start :从数据集中取数据的其实位置
count :取的数据数量
还是以上面的30x30的彩色图像为例,如果每次需要取1000个,那么第一次取时,start应该设置为[1, 1, 1, 1] ,count设置为:[30, 30 ,3 1000]。第二次取值时,start则应该设置为[1, 1, 1, 1001],count则设置为:[30, 30, 3, 1000]。
如果有读写权限的,可以直接打开读取。如果没有读写权限,按下面 *** 作取得读写权限:
一、右键单击需要获取权限的文件或文件夹,点击“属性”,点击“属性”中的“安全”选项卡,点击“高级”按钮。
二、更改“所有者”,如果“所有者”已经是当前用户,则这一步可以跳过。进入高级安全设置,单击“所有者”后面的“更改”。
1、输入要获取权限的用户名,点击“检查名称”;
2、如果用户名比较复杂或滚前不记得用户名,可以先点开“高级”,再点击“立即查找”进行查找用户,并在结果中找到并选中正确的用户名,点击确定;
3、已经识别正确用户名,再点击笑乱确定;
4、选中“替换子容器和对象的所有者”,再单击“确定”;权限对话框和属性对话框全部确定,完成所有者权限获取。
三、再次右键单击需要获取权限的文件夹,点击“属性”,点击“属性”中的“安全”选项卡,单击“组或用户名”列表下面的“编辑”,在d出来的权限对话框中单击“添加”,选择用户后点击确定。回到权限对话框中,确认选中正确的用户名后,在下方的权限列表中选中“完全控制”;确定,完成文件夹权限获取。
备注:
获取“所有者”和“权限”,如果选中了“替换子容器和对象的所有者”,根据文件夹下文件数量不同,所需时间也不同,并大升清且,如果此目录下有系统属性的目录或文件可能无法被修改,碰到此情况跳过即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)