python - 在python中快速读取HDF 5文件?

标签 python numpy scipy hdf5 h5py

我有一台仪器,可以将数据(来自模数转换器的许多迹线)保存为 HDF 5 文件。如何在Python中有效地打开这个文件?我尝试了以下代码,但似乎需要很长时间才能提取数据。

此外,它以错误的顺序读取数据:不是读取 1,2,3,而是读取 1,10,100,1000。

有什么想法吗?

这里是示例数据文件的链接:https://drive.google.com/file/d/0B4bj1tX3AZxYVGJpZnk2cDNhMzg/edit?usp=sharing

这是我的超慢代码:

import h5py
import matplotlib.pyplot as plt
import numpy as np


f = h5py.File('sample.h5','r')

ks = f.keys()

for index,key in enumerate(ks[:10]):
    print index, key
    data = np.array(f[key].values())
    plt.plot(data.ravel())

plt.show()

最佳答案

就数据的顺序而言:

In [10]: f.keys()[:10]
Out[10]:
[u'Acquisition.1',
 u'Acquisition.10',
 u'Acquisition.100',
 u'Acquisition.1000',
 u'Acquisition.1001',
 u'Acquisition.1002',
 u'Acquisition.1003',
 u'Acquisition.1004',
 u'Acquisition.1005',
 u'Acquisition.1006']

这是未用零填充的数字的正确顺序。它按字典顺序排序,而不是按数字排序。请参阅Python: list.sort() doesn't seem to work寻找可能的解决方案。

其次,在循环内重建数组会降低性能:

In [20]: d1 = f[u'Acquisition.990'].values()[0][:]

In [21]: d2 = np.array(f[u'Acquisition.990'].values())

In [22]: np.allclose(d1,d2)
Out[22]: True

In [23]: %timeit d1 = f[u'Acquisition.990'].values()[0][:]
1000 loops, best of 3: 401 µs per loop

In [24]: %timeit d2 = np.array(f[u'Acquisition.990'].values())
1 loops, best of 3: 1.77 s per loop

关于python - 在python中快速读取HDF 5文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164619/

相关文章:

python - 函数调用python中的表达式吗?

python - 如何在tensorflow中将hsv张量更改为rgb张量?

python - python中有限元节点应力点之间高效准确的插值

python - 按另一列的顺序对包含 NA 的一列中的值进行排序

python - “unindexed dimensions” 是什么?为什么坐标*为空*?

python - 为 blender 安装 numpy

python - 处理 NaN 进行距离计算时出现问题?

python - 列出 ipython 和 jupyter 中的内存使用情况

python - scipy.optimize.fmin_slsqp 的使用

python - scipy 错误,但没有引发异常