标签: hdf5

从Python存储字符串列表到HDF5数据集

我试图将一个可变长度的字符串列表存储到HDF5数据集.这个代码是

import h5py
h5File=h5py.File('xxx.h5','w')
strList=['asas','asas','asas']  
h5File.create_dataset('xxx',(len(strList),1),'S10',strList)
h5File.flush() 
h5File.Close()  
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,指出"TypeError:没有dtype的转换路径:dtype('< U3')"其中<表示实际小于符号
我该如何解决这个问题.

python hdf5 h5py

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

HDF5观众/编辑linux

HDFVIEW相当不错,但还有其他选择吗?

能够改变诸如分块/压缩设置之类的东西会很棒 - hdfview没有这个功能 - 无需使用Java/python /其他任何东西来加载文件.

viewer hdf5

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

numpy undefined symbol:PyFPE_jbuf

我正在尝试使用One Million Song数据集,为此我必须安装python表,numpy,cython,hdf5,numexpr等等.

昨天我设法安装了我需要的所有东西,在遇到hdf5的麻烦之后,我下载了预编译的二进制包并将它们保存在我的/ bin文件夹中,以及/ lib中的各个库,之后我测试了这个python脚本: http://labrosa.ee.columbia.edu/millionsong/sites/default/files/tutorial1.py.txt

它工作得很好,要清楚我的工作方式是首先运行脚本并开始安装所需的依赖项,但今天我重新启动了我的笔记本电脑并且它不起作用,现在它在控制台上抛出了这个错误:

python2.7 script.py 
Run Code Online (Sandbox Code Playgroud)

回报:

import numpy as np # get it at: http://numpy.scipy.org/
from . import random
from .mtrand import *
ImportError: /home/francisco/.local/lib/python2.7/site-packages/numpy/random/mtrand.so: undefined symbol: PyFPE_jbuf
Run Code Online (Sandbox Code Playgroud)

在我看来,在这样的文件中有一个缺失的变量,我的猜测是脚本正在寻找错误位置的numpy库,因为我做了这么多失败的安装,也许我打破了一些东西,它只是因为它被加载了在计算机的时间记忆中.

我尝试安装Anaconda,我创建了一个新的环境并安装了与anaconda包管理器一起打包,甚至认为我列出了所有打包并返回:

# packages in environment at /home/francisco/anaconda2/envs/Music:
#
biopython                 1.66                np110py27_0  
cython                    0.23.4                    <pip>
hdf5                      1.8.15.1                      2  
mkl                       11.3.1                        0  
numexpr                   2.5                 np110py27_0  
numpy                     1.10.4                   py27_1  
openssl                   1.0.2g                        0  
pillow                    3.1.1                     <pip>
pip                       8.1.1                    py27_0  
pytables                  3.2.2               np110py27_1  
python                    2.7.11                        0  
python-ldap               2.4.25                    <pip>
readline                  6.2 …
Run Code Online (Sandbox Code Playgroud)

python linux numpy hdf5 anaconda

20
推荐指数
4
解决办法
3万
查看次数

hdf5是否支持并发读取或写入不同的文件?

我试图理解hdf5并发的限制.

有两个版本的hdf5:并行HDF5默认值.并行版本目前在Ubuntu中提供,默认在Anaconda中(由"--enable-parallel"标志判断).

我知道并行写入同一个文件是不可能的.但是,我不完全理解默认情况下或使用并行构建可以扩展以下操作:

  • 从同一个文件读取的几个进程
  • 从不同文件中读取的几个进程
  • 写入不同文件的几个进程.

此外,有没有任何理由anaconda默认没有--enable-parallel标志?(https://github.com/conda/conda-recipes/blob/master/hdf5/build.sh)

hdf5 anaconda

19
推荐指数
1
解决办法
6988
查看次数

使用h5py删除hdf5数据集

有没有办法从hdf5文件中删除数据集,最好是使用h5py?或者,是否可以覆盖数据集,同时保持其他数据集完好无损?

据我了解,h5py可以在5种模式下读/写hdf5文件

f = h5py.File("filename.hdf5",'mode')
Run Code Online (Sandbox Code Playgroud)

其中mode可以r用于读取,r+用于读写,a用于读写但是如果不存在则创建新文件,w用于写/覆盖, 如果文件已经存在,则该文件w-相同w但失败.我尝试了所有但似乎没有工作.

任何建议都非常感谢.

python hdf5 dataset h5py

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

编写并将float数组附加到C++中hdf5文件中的唯一数据集

我正在处理文件数量,文件的每个处理将输出几千个浮点数组,我将所有文件的数据存储在一个大型数据集中的单个hdf5中,以便进一步处理.

目前我很困惑如何将我的数据附加到hdf5文件中.(在上面的代码中注释)在上面的2个for循环中,正如你所看到的,我想一次将1维float数组追加到hdf5中,而不是整个东西.我的数据是以TB为单位,我们只能将数据附加到文件中.

有几个问题:

  1. 在这种情况下如何附加数据?我必须使用什么样的功能?
  2. 现在,我有fdim [0] = 928347543,我已尝试将HDF5的无限标志放入,但运行时执行抱怨.有没有办法做到这一点?我不想每次计算出的数据; 有没有办法简单地继续添加数据,而不关心fdim的价值?

或者这不可能吗?

编辑:

我一直在关注Simon的建议,目前这里是我的更新代码:

hid_t desFi5;
hid_t fid1;
hid_t propList;
hsize_t fdim[2];

desFi5 = H5Fcreate(saveFilePath, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);

fdim[0] = 3;
fdim[1] = 1;//H5S_UNLIMITED;

fid1 = H5Screate_simple(2, fdim, NULL);

cout << "----------------------------------Space done\n";

propList = H5Pcreate( H5P_DATASET_CREATE);

H5Pset_layout( propList, H5D_CHUNKED );

int ndims = 2;
hsize_t chunk_dims[2];
chunk_dims[0] = 3;
chunk_dims[1] = 1;

H5Pset_chunk( propList, ndims, chunk_dims );

cout << "----------------------------------Property done\n";

hid_t dataset1 = H5Dcreate( desFi5, "des", H5T_NATIVE_FLOAT, fid1, …
Run Code Online (Sandbox Code Playgroud)

c++ arrays file append hdf5

17
推荐指数
1
解决办法
8226
查看次数

在python3中使用h5py发现密钥

python2.7,我可以分析一个hdf5文件密钥使用

$ python
>>> import h5py
>>> f = h5py.File('example.h5', 'r')
>>> f.keys()
[u'some_key']
Run Code Online (Sandbox Code Playgroud)

然而,在python3.4,我得到了一些不同的东西:

$ python3 -q
>>> import h5py
>>> f = h5py.File('example.h5', 'r')
>>> f.keys()
KeysViewWithLock(<HDF5 file "example.h5" (mode r)>)
Run Code Online (Sandbox Code Playgroud)

是什么KeysViewWithLock,以及如何在Python3中检查我的HDF5密钥?

hdf5 python-2.7 python-3.4

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

TensorFlow - tf.data.Dataset读取大型HDF5文件

我正在设置一个TensorFlow管道,用于读取大型HDF5文件作为我的深度学习模型的输入.每个HDF5文件包含100个可变大小长度的视频,存储为压缩JPG图像的集合(以使磁盘上的大小可管理).使用tf.data.Dataset和映射tf.py_func,使用自定义Python逻辑从HDF5文件中读取示例非常简单.例如:

def read_examples_hdf5(filename, label):
    with h5py.File(filename, 'r') as hf:
        # read frames from HDF5 and decode them from JPG
    return frames, label

filenames = glob.glob(os.path.join(hdf5_data_path, "*.h5"))
labels = [0]*len(filenames) # ... can we do this more elegantly?

dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
dataset = dataset.map(
    lambda filename, label: tuple(tf.py_func(
        read_examples_hdf5, [filename, label], [tf.uint8, tf.int64]))
)

dataset = dataset.shuffle(1000 + 3 * BATCH_SIZE)
dataset = dataset.batch(BATCH_SIZE)
iterator = dataset.make_one_shot_iterator()
next_batch = iterator.get_next()
Run Code Online (Sandbox Code Playgroud)

这个例子有效,但问题是它似乎tf.py_func一次只能处理一个例子.由于我的HDF5容器存储了100个示例,因此这种限制会导致显着的开销,因为文件经常需要打开,读取,关闭和重新打开.将所有100个视频示例读入数据集对象然后继续使用下一个HDF5文件(最好是在多个线程中,每个线程处理它自己的HDF5文件集合)会更有效率.

所以,我想要的是在后台运行的一些线程,从HDF5文件中读取视频帧,从JPG解码它们,然后将它们提供给数据集对象.在引入tf.data.Dataset管道之前,使用 …

python video hdf5 tensorflow tensorflow-datasets

17
推荐指数
2
解决办法
7874
查看次数

获取HDF5内容列表(Pandas HDFStore)

从HDF5商店中的表格中选择内容没有问题:

with pandas.HDFStore(data_store) as hdf:
    df_reader = hdf.select('my_table_id', chunksize=10000)
Run Code Online (Sandbox Code Playgroud)

如何获取使用pandas选择的所有表的列表?

python hdf5 pandas hdfstore

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

'/'在HDF5文件名称中混淆

我在h5py,PyTables(通过Pandas)和C++生成的HDF5文件之间经历了一些非常奇怪的交互.似乎h5checkh5py似乎应对包含'/'的类型名称,但pandas/PyTables不能.显然,我的理解存在差距,因此:

我在这里有什么不明白的?


血淋淋的细节

我在HDF5文件中有以下数据:

   [...]
   DATASET "log" {
      DATATYPE  H5T_COMPOUND {
         H5T_COMPOUND {
            H5T_STD_U32LE "sec";
            H5T_STD_U32LE "usec";
         } "time";
         H5T_IEEE_F32LE "CIF/align/aft_port_end/extend_pressure";
         [...]
Run Code Online (Sandbox Code Playgroud)

这是通过C++ API创建的.该h5check公用事业说,文件是有效的.

请注意,这CIF/align/aft_port_end/extend_pressure 并不是指组/节点/叶子的路径.它是一个标签,我们在内部使用,恰好有一些内部结构包含'/'作为分隔符.我们不希望HDF5文件对此有所了解:它不应该关心.显然,如果'/'在任何HDF5名称中都是非法的,那么我们必须将该分隔符更改为其他名称.

使用PyTables(好吧,Pandas但它内部使用PyTables)来读取文件,我得到了一个

 >>> import pandas as pd
 >>> store = pd.HDFStore('data/XXX-20150423-071618.h5')
 >>> store
/home/XXX/virt/env/develop/lib/python2.7/site-packages/tables/group. py:1156: UserWarning: problems loading leaf ``/log``::

  the ``/`` character is not …
Run Code Online (Sandbox Code Playgroud)

python hdf5 pytables h5py pandas

16
推荐指数
1
解决办法
1508
查看次数