Julia : 再谈HDF5 的save 和 load

我去年6月份左右测试了在0.2或0.3版本中,Julia中save 和load的效率,并和MATLAB进行了相关的比较。
一、自定义类型的测试
以历史行情数据为例,我测试2700万条BAR数据,这个大约相当于800只股票1分钟线近半年的历史数据的规模。具体类型见下。
1、测试数据类型

type kBarData 
         Code             ::ASCIIString
         DateTime         ::Dates.DateTime
         Close            ::Float64
         Open             ::Float64
         High             ::Float64
         Low              ::Float64
         PreClose         ::Float64
         OpenInterest     ::Float64 # 商品,通过这个来判断迁月
         Volume           ::Float64
         Amount           ::Float64 # 股指
 end

上面是我们自定义的复合类型,是我们经常用到的格式。这个在实际环境中更有测试的意义。
2、测试代码

using HDF5,JLD;
t0             =time()
testNum        =100000;
dayBarNum      = 270;
println("测试数据, 测试共  $(testNum)   天, 每天 有  $(dayBarNum)  个BAR记录! ")
@time tdata    =setdata(testNum,dayBarNum);
t1             =time();
println("set data :  $(t1-t0) s")
println("下面开始存数据,分别做三次......")
@time savedata(tdata);
println("下面开始取数据,分别做三次......")
@time @load  string("E:\\typedata_",1,".jld") # 由于@load 无法识别环境变量,就没有写函数封装。
@time @load  string("E:\\typedata_",2,".jld")
@time @load  string("E:\\typedata_",3,".jld")
function setdata(testNum,dayBarNum)
     tdata =Dict{ASCIIString,Array{kBarData,1}}();
     code ="600036SH"
     for i =1: testNum
         nowTime = Dates.now()
         td             = Array{kBarData,1}();
         tempcode       = string(code,"_",i)
         for j =1: dayBarNum
              rd             = rand(1,8)*1000.0+100000000.0
              bar           = kBarData(code,nowTime,rd[1],rd[2],rd[3],rd[4],rd[5],rd[6],rd[7],rd[8]);
              push!(td,bar)
         end
         if haskey(tdata,tempcode)
                 push!(tdata[tempcode],td)
          else
                setindex!(tdata,td,tempcode)
          end
     end
    return tdata;
end
function savedata(tdata)
       for i=1:3
             println("第 $(i)  次存数据.....")
              @time @save  string("E:\\typedata_",i,".jld") tdata;
      end
end

3、测试结果输出
从结果上看,HDF5库的效率仍不理想,仍不适合做为取数据的一种安排。仍需努力呀!

二、@save @load => save load
在取数据时,建议使用load(filename,var)的精准方式。

 function getdata()
   for i=1:3
         println("第 $(i)  次取数据.....")
         filename =string("E:\\typedata_",i,".jld");
          @time temp = load( filename,"tdata");
  end
end

同样,建议@save , 改用成save(filename,var)的方式会更好一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第一章 HDF介绍 1.1. 本章概况 1.2. 什么是HDF 1.3. 为什么创建HDF 1.4. HDF的6个基本数据结构 1.5. HDF文件的3层交互 1.6. HDF文件格式 1.7. HDF4和HDF5 第二章 HDF库 2.1 本章简介 2.2 获得和安装HDF库 2.3 支持的程序语言 2.4 应用编程接口 2.5 id文件信息 2.6 编译介绍 第三章 常规光栅图像应用编程接口(GR API) 3.1 本章简介 3.2 General Raster Image(常规光栅图像)数据模型 3.3 GR API 3.4 把Raster Image(光栅图像)写入一个HDF文件中 3.5 从一个HDF文件里读取Raster Image(光栅图像) 第四章 科学数据集应用编程接口(SDS API) 4.1 本章简介 4.2 科学数据集数据模型 4.3 SD API 4.4 把科学数据集写入HDF文件里 4.5 从HDF文件中读取科学数据集 第五章 虚拟数据应用编程接口(VS API) 5.1 本章简介 5.2 Vdata数据模型 5.3 VS API 5.4 把Vdata写入一个HDF文件中 5.5 从一个HDF文件中读取Vdata 第六章 注解应用编程接口(AN API) 6.1 本章简介 6.2 注解数据模型 6.3 AN API 6.4 把注解写入HDF文件里 6.5 从HDF文件中读取注解 第七章 虚拟组结构应用编程接口(V API) 7.1 本章简介 7.2 Vgroups 数据模型 7.3 V API 7.4 创建Vgroups和添加数据对象 7.5 获取有关Vgroup的信息和删除数据对象 第八章 HDF命令行工具 8.1 本章简介 8.2 HDF命令行工具介绍 8.3 HDF查询工具 8.4 HDF数据格式转换工具 8.5 HDF数据压缩工具 第九章 使用JHV浏览HDF文件 9.1 本章简介 9.2 什么是JHV 9.3 获取和安装JHV 9.4 显示HDF对象的树状结构 9.5 显示文件和数据对象的注解 9.6 显示Vdatas 9.7 显示光栅图像 9.8 显示科学数据集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值