簡體   English   中英

在python中快速讀取HDF 5文件?

[英]Quickly read HDF 5 file in python?

我有一台儀器可以將數據(來自模數轉換器的許多跡線)保存為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()似乎不適用於可能的解決方案。

其次,通過在循環中重建數組來破壞性能:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM