Blog

Blog

PHODAL

HDF5 小试——高大上的多对象文件格式

这里的文件是从osrc中拿到的,也就是github上面的数据,可以在这里获取一个拷贝,只是是我自己get的。https://github.com/gmszone/ml

HDF5 简介

HDF是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。HDF可以表示出科学数据存储和分布的许多必要条件。HDF被设计为:

  • 自述性:对于一个HDF文件里的每一个数据对象,有关于该数据的综合信息(元数据)。在没有任何外部信息的情况下,HDF允许应用程序解释HDF文件的结构和内容。
  • 通用性:许多数据类型都可以被嵌入在一个HDF文件里。例如,通过使用合适的HDF数据结构,符号、数字和图形数据可以同时存储在一个HDF文件里。
  • 灵活性:HDF允许用户把相关的数据对象组合在一起,放到一个分层结构中,向数据对象添加描述和标签。它还允许用户把科学数据放到多个HDF文件里。
  • 扩展性:HDF极易容纳将来新增加的数据模式,容易与其他标准格式兼容。
  • 跨平台性:HDF是一个与平台无关的文件格式。HDF文件无需任何转换就可以在不同平台上使用。

除了NCSA在用它,我想还有国家卫星气象中心因为国家卫星气象中心提供了一个中文版的翻译HDF5.0 使用简介 - 国家卫星气象中心 ,大赞一个!

HDF5 小试

看看points.h5里面有什么。。

 h5dump points.h5

不过里面的内容过多了

 h5dump points.h5 | less

会有类似于下面的结果


HDF5 "points.h5" {
GROUP "/" {
   DATASET "names" {
      DATATYPE  H5T_STRING {
         STRSIZE 39;
         STRPAD H5T_STR_NULLPAD;
         CSET H5T_CSET_ASCII;
         CTYPE H5T_C_S1;
      }
      DATASPACE  SIMPLE { ( 50001 ) / ( 50001 ) }
      DATA {
      (0): "wangqianfront\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0
      (1): "saturday06\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
      ....
      (50000,0): 0.0833333, 0.636364, 0, 0, 0, 0, 0, 0.363636, 0, 0, 0, 0, 0,
      (50000,13): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0.5, 0,
      (50000,32): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      }
   }
}
}

只是如果我们只是想查看h5文件的结构而不是结果

h5ls -vlr points.h5

我们可以用上面这个命令

Opened "points.h5" with sec2 driver.
/                        Group
    Location:  1:96
    Links:     1
/names                   Dataset {50001/50001}
    Location:  1:1400
    Links:     1
    Storage:   1950039 logical bytes, 1950039 allocated bytes, 100.00% utilization
    Type:      39-byte null-padded ASCII string
/points                  Dataset {50001/50001, 63/63}
    Location:  1:800
    Links:     1
    Storage:   25200504 logical bytes, 25200504 allocated bytes, 100.00% utilization
    Type:      native double

关于参数的解释

-l, --label     Label members of compound datasets
-v, --verbose   Generate more verbose output
-s, --string    Print 1-byte integer datasets as ASCII

这个结果也就是说只存储了5万个数据,有意思的是上面是5万个用户名。

 name
 points

而这是一个有趣的用于记录github上面用户与相似用户的数据。

hdf5命令

它还有下面这些命令

 h52gif         h5debug        h5import       h5mkgrp        h5repack       h5unjam
 h5cc           h5diff         h5jam          h5perf_serial  h5repart
 h5copy         h5dump         h5ls           h5redeploy     h5stat

只是似乎在当前用不到这些


或许您还需要下面的文章:

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 最新技术分享

标签