用python快速读取HDF 5文件?

用python快速读取HDF 5文件?,python,numpy,scipy,hdf5,h5py,Python,Numpy,Scipy,Hdf5,H5py,我有一个仪器,它将数据(许多模拟到数字转换器的记录道)保存为HDF 5文件。如何用python高效地打开此文件?我尝试了以下代码,但提取数据似乎需要很长时间 此外,它以错误的顺序读取数据:它读取的不是1,2,3,而是1,101001000 有什么想法吗 以下是指向示例数据文件的链接: 这是我的超慢代码: import h5py import matplotlib.pyplot as plt import numpy as np f = h5py.File('sample.h5','r')

我有一个仪器,它将数据(许多模拟到数字转换器的记录道)保存为HDF 5文件。如何用python高效地打开此文件?我尝试了以下代码,但提取数据似乎需要很长时间

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

有什么想法吗

以下是指向示例数据文件的链接:

这是我的超慢代码:

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']
这是没有用零填充的数字的正确顺序。它是按字典排序的,而不是按数字排序的。有关可能的解决方案,请参阅

其次,在循环中重建阵列会降低性能:

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

谢谢你,乔希!但是plt.plot似乎不想绘制数据,除非我使用np.array()函数。还有别的方法吗?@DanHickstein我更新了我的答案来解决这个问题。这假设每个
f[key].values()
只包含一个感兴趣的项目,从我快速查看的数据来看似乎就是这样。啊!就在我看到你的答案出现之前,我就知道了。谢谢:)