我有一台仪器可以将数据(来自模数转换器的许多迹线)保存为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()
答案 0 :(得分:3)
就您的数据顺序而言:
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