替代npz文件?

时间:2015-04-30 10:21:57

标签: python arrays hdf

我使用以Python .npz格式存储的数组。我有很多这些文件,它们都有相同的共同结构:filename my_file_var1_var2_var3.npz包含以下项目(所有数组都是32位Floats):

  • 2D阵列(N = 11,Ns = 2000)
  • 2D阵列(12,N)
  • 2D阵列(300,N)
  • 2D阵列(300,Ns)
  • 一个漂浮物
  • 一个整数

超过1000个文件非常烦人,每个文件最终需要大约4Mb。我认为将它们转移到容器(如HDF5 / Pytables或类似容器)会很好。不同的数组只是数组,没有优先排序或任何东西(它们是有效的矩阵或将被操作的向量堆栈)。每个文件名的所有数组都需要同时使用。

是否有关于哪种格式更好地检索与var1var2var3相关联的数组的建议,这些数据是可移植且有效的存储

1 个答案:

答案 0 :(得分:1)

使用PyTables以HDF5格式存储数据集肯定会有意义(例如参见example)。

它不仅会将您的所有数据放在同一个容器中,而且还可以通过BLOSC获得压缩,高效查询以及更快的读/写访问权。

由于您的商品具有可变形状,因此您无法将所有相同类型的商品放入公共数组中。所以你有几个选择,

  1. 将每个阵列另存为单独的HDF5节点
  2. 如果def link_to(text='',link='#',options={}) link = link.include?('?') ? "#{link}&layout=foo" : "#{link}?layout=foo" super(text,link,options) end是可变的但具有一些合理的最大值N(例如20或30),您只需创建大小为N_max的唯一数组并填充您不需要的元素。 ; t默认需要零。令人惊讶的是,如果您需要同时查询所有项目,这可能会更有效,如果您使用压缩,则不会看到大小开销。