标签: hdf5

搜索HDF5数据集

我正在探索HDF5.我已经阅读了线程" 评估HDF5 "中的有趣评论,我理解HDF5是存储数据的首选解决方案,但您如何查询?例如,假设我有一个包含一些标识符的大文件:有没有办法快速知道文件中是否存在给定的标识符?

search hdf5

14
推荐指数
2
解决办法
9939
查看次数

HDF5中的稀疏阵列支持

我需要以某种方式在磁盘上存储512 ^ 3阵列,我目前正在使用HDF5.由于阵列稀疏,因此浪费了大量磁盘空间.

HDF5是否为稀疏阵列提供任何支持?

sparse-array hdf5 sparse-matrix

14
推荐指数
2
解决办法
5622
查看次数

Google Protocol Buffers,HDF5,NumPy比较(传输数据)

我需要帮助才能做出决定.我需要在我的应用程序中传输一些数据,并且必须在这三种技术之间做出选择.我已经阅读了所有技术(教程,文档),但仍然无法决定......

他们如何比较?

我需要支持元数据(接收文件的能力和没有任何附加信息/文件的读取),快速读/写操作,存储动态数据的能力将是一个加号(如Python对象)

我已经知道的事情:

  • NumPy非常快,但无法存储动态数据(如Python对象).(元数据怎么样?)
  • HDF5非常快,支持自定义属性,易于使用,但无法存储Python对象.此外,HDF5本地序列化NumPy数据,因此,恕我直言,NumPy没有优于HDF5的优势
  • Google Protocol Buffers也支持自我描述,速度相当快(但目前Python支持很差,速度慢且有问题).CAN存储动态数据.减少 - 自描述不适用于Python,并且> = 1 MB的消息不是非常快速地序列化/反序列化(读取"慢").

PS:我需要传输的数据是NumPy/SciPy的"工作结果"(数组,复杂结构的数组等)

UPD:需要跨语言访问(C/C++/Python)

python numpy hdf5

14
推荐指数
1
解决办法
5363
查看次数

使用HDF5 C++ api在数据集上设置属性

我在HDF5 1.8.7中使用HDF5 C++ API,并希望使用H5 :: Attribute实例在H5 :: DataSet实例中设置几个标量属性,但找不到任何示例.使用C API非常干净和干燥:

/* Value of the scalar attribute */ 
int point = 1;                         

/*
 * Create scalar attribute for the dataset, my_dataset.
 */
aid2  = H5Screate(H5S_SCALAR);
attr2 = H5Acreate(my_dataset, "Integer attribute", H5T_NATIVE_INT, aid2,H5P_DEFAULT);

/*
 * Write scalar attribute to my_dataset.
 */
ret = H5Awrite(attr2, H5T_NATIVE_INT, &point); 

/*
 * Close attribute dataspace.
 */
ret = H5Sclose(aid2); 

/*
 * Close attribute.
 */
ret = H5Aclose(attr2); 
Run Code Online (Sandbox Code Playgroud)

由于某些奇怪的原因,C++ API中的H5 :: Attribute和H5 :: DataSet类似乎缺少必要的方法.如果有人能够使用C++ API提出一个具体的例子,我将非常感激.

c++ hdf5

14
推荐指数
1
解决办法
3869
查看次数

Numpy和PyTables的浮点异常

我有一个由PyTables生成的相当大的HDF5文件,我试图在集群上读取.当我读到一个单独的块时,我遇到了NumPy的问题.我们来看看这个例子:

HDF5文件中阵列的总形状是,

In [13]: data.shape
Out[13]: (21933063, 800, 3)
Run Code Online (Sandbox Code Playgroud)

此数组中的每个条目都是a np.float64.

我让每个节点读取大小的切片(21933063,10,3).不幸的是,NumPy似乎无法一次读取所有2100万个子对象.我试图通过将这些切片分成10个大小的切片(2193306,10,3)然后使用以下简化来使事情正常工作:

In [8]: a = reduce(lambda x,y : np.append(x,y,axis=0), [np.array(data[i*      \
        chunksize: (i+1)*chunksize,:10],dtype=np.float64) for i in xrange(k)])
In [9]:
Run Code Online (Sandbox Code Playgroud)

在哪里1 <= k <= 10chunksize = 2193306.此代码适用于k <= 9; 否则我得到以下内容:

In [8]: a = reduce(lambda x,y : np.append(x,y,axis=0), [np.array(data[i*      \
        chunksize: (i+1)*chunksize,:10],dtype=np.float64) for i in xrange(k)])
Floating point exception
home@mybox  00:00:00  ~
$
Run Code Online (Sandbox Code Playgroud)

我尝试使用Valgrind的memcheck工具来弄清楚发生了什么,似乎PyTables就是罪魁祸首.跟踪中显示的两个主要文件是libhdf5.so.6与之相关的文件blosc …

python numpy hdf5 pytables

14
推荐指数
1
解决办法
1968
查看次数

HDF5文件和PyTables文件之间的区别

HDF5创建的文件和文件之间是否有区别PyTables

PyTables有两个功能,.isHDFfile().isPyTablesFile()建议两种格式之间存在差异.

我已经在谷歌上做了一些调查,并且已经认识到PyTables是建立在HDF之上的,但我无法找到更多.

我对互操作性,速度和开销特别感兴趣.

谢谢.

python numpy hdf5 pytables

14
推荐指数
1
解决办法
2123
查看次数

g ++编译错误:对存在的共享库函数的未定义引用

我最近在ubuntu机器上安装了hdf5库,现在无法链接到导出的函数.我写了一个简单的测试脚本readHDF.cpp来解释这个问题:

#include <hdf5.h>

int main(int argc, char * argv[])
{
  hid_t     h5_file_id = H5Fopen(argv[1], H5F_ACC_RDWR, H5P_DEFAULT);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译命令是

g++ -Wl,-rpath,$HOME/hdf5/lib -I$HOME/hdf5/include \
    -L$HOME/hdf5/lib -l:$HOME/hdf5/lib/libhdf5.so readHDF.cpp
Run Code Online (Sandbox Code Playgroud)

返回以下错误

/tmp/cc6DXdxV.o: In function `main':  
readHDF.cpp:(.text+0x1f): undefined reference to `H5check_version'  
readHDF.cpp:(.text+0x3c): undefined reference to `H5Fopen'  
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为nm命令似乎说该函数已被导出:

nm -C $HOME/hdf5/lib/libhdf5.so | grep H5check_version
Run Code Online (Sandbox Code Playgroud)

返回

0000000000034349 T H5check_version
Run Code Online (Sandbox Code Playgroud)

和类似的结果H5Fopen.什么可能出错?不确定它是否有帮助,但如果我注释掉H5Fopen脚本的部分,那么它编译得很好:

#include <hdf5.h>

int main(int argc, char * argv[])
{
hid_t …
Run Code Online (Sandbox Code Playgroud)

g++ shared-libraries hdf5 ld undefined-reference

14
推荐指数
2
解决办法
2万
查看次数

如何使用python将Hdf5文件部分复制到保持相同结构的新文件?

我有一个大的hdf5文件,看起来像这样:

A/B/dataset1, dataset2
A/C/dataset1, dataset2
A/D/dataset1, dataset2
A/E/dataset1, dataset2
Run Code Online (Sandbox Code Playgroud)

...

我想创建一个仅包含以下内容的新文件:A/B/dataset1,dataset2 A/C/dataset1,dataset2

python中最简单的方法是什么?

我做了:

fs = h5py.File('source.h5', 'r')
fd = h5py.File('dest.h5', 'w')
fs.copy('group B', fd)
Run Code Online (Sandbox Code Playgroud)

问题是我得到了dest.h5:

B/dataset1, dataset2
Run Code Online (Sandbox Code Playgroud)

并且我遗漏了一部分树枝.

python hdf5 h5py

14
推荐指数
1
解决办法
9975
查看次数

使用h5py创建的HDF5文件无法通过h5py打开

我在Ubuntu 12.04(32位版本)下使用Anaconda作为Python发行版并在ipython笔记本中编写,显然创建了一个没有任何问题的HDF5文件.底层数据都是numpy数组.例如,

import numpy as np
import h5py

f = h5py.File('myfile.hdf5','w')

group = f.create_group('a_group')

group.create_dataset(name='matrix', data=np.zeros((10, 10)), chunks=True, compression='gzip')
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试从新的iypthon笔记本打开此文件,我会收到一条错误消息:

f = h5py.File('myfile.hdf5', "r")

---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-4-b64ac5089cd4> in <module>()
----> 1 f = h5py.File(file_name, "r")

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/files.pyc in __init__(self, name, mode, driver, libver, userblock_size, **kwds)
    220 
    221             fapl = make_fapl(driver, libver, **kwds)
--> 222             fid = make_fid(name, mode, userblock_size, fapl)
    223 
    224         Group.__init__(self, fid)

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/files.pyc in make_fid(name, mode, userblock_size, fapl, fcpl)
     77 
     78     if mode == …
Run Code Online (Sandbox Code Playgroud)

python io numpy hdf5 h5py

14
推荐指数
1
解决办法
3万
查看次数

如何在hdf5中高效保存python pandas数据帧并将其作为R中的数据帧打开?

我认为标题涵盖了这个问题,但要阐明:

熊猫 Python包具有用于在python保持表数据的数据帧的数据类型.它还有一个方便的hdf5文件格式接口,所以pandas DataFrames(和其他数据)可以使用简单的类似dict的界面保存(假设你安装了pytables)

import pandas 
import numpy
d = pandas.HDFStore('data.h5')
d['testdata'] = pandas.DataFrame({'N': numpy.random.randn(5)})
d.close()
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是,如果我然后尝试将相同的hdf5加载到RI中,请看事情并非如此简单:

> library(hdf5)
> hdf5load('data.h5')
NULL
> testdata
$block0_values
         [,1]      [,2]      [,3]       [,4]      [,5]
[1,] 1.498147 0.8843877 -1.081656 0.08717049 -1.302641
attr(,"CLASS")
[1] "ARRAY"
attr(,"VERSION")
[1] "2.3"
attr(,"TITLE")
[1] ""
attr(,"FLAVOR")
[1] "numpy"

$block0_items
[1] "N"
attr(,"CLASS")
[1] "ARRAY"
attr(,"VERSION")
[1] "2.3"
attr(,"TITLE")
[1] ""
attr(,"FLAVOR")
[1] "numpy"
attr(,"kind")
[1] "string"
attr(,"name")
[1] "N."

$axis1
[1] 0 1 2 3 …
Run Code Online (Sandbox Code Playgroud)

python r hdf5 pandas data.table

13
推荐指数
2
解决办法
1万
查看次数