首先,我阅读了主题“Fastest way to write hdf5 file with Python?”,但没有多大帮助。
我正在尝试加载一个 h5f5 结构中大约 1GB 的文件(大小为 (70133351,1) 的矩阵)。
代码很简单,但是速度很慢。
import h5py
f = h5py.File("8.hdf5", "w")
dset = f.create_dataset("8", (70133351,1))
myfile=open("8.txt")
for line in myfile:
line=line.split("\t")
dset[line[1]]=line[0]
myfile.close()
f.close()
我有一个50MB的较小版本的矩阵,我尝试了相同的代码,24小时后还没有完成。
我知道让它更快的方法是避免“for循环”。如果我使用常规 python,我会使用哈希理解。然而,看起来它不适合这里。
我可以稍后通过以下方式查询该文件:
f = h5py.File("8.hdf5")
h=f['8']
print 'GFXVG' in h.attrs
考虑到 GFXVG 是 h 中的键,这会回答我“正确”
有人有什么想法吗?
文件部分示例:
508 LREGASKW
592 SVFKINKS
1151 LGHWTVSP
131 EAGQIISE
198 ELDDSARE
344 SQAVAVAN
336 ELDDSARF
592 SVFKINKL
638 SVFKINKI
107 PRTGAGQH
107 PRTGAAAA
谢谢
最佳答案
您可以使用 loadtext
将所有数据加载到 numpy 数组
中,并使用它来实例化您的 hdf5
数据集。
import h5py
import numpy as np
d = np.loadtxt('data.txt', dtype='|S18')
返回
array([['508.fna', 'LREGASKW'],
['592.fna', 'SVFKINKS'],
['1151.fna', 'LGHWTVSP'],
['131.fna', 'EAGQIISE'],
['198.fna', 'ELDDSARE'],
['344.fna', 'SQAVAVAN'],
['336.fna', 'ELDDSARF'],
['592.fna', 'SVFKINKL'],
['638.fna', 'SVFKINKI'],
['107.fna', 'PRTGAGQH'],
['1197.fna', 'ELDDSARR'],
['1309.fna', 'SQTIYVWF'],
['974.fna', 'PNNLRFIA'],
['230.fna', 'IGKVYHIE'],
['76.fna', 'PGVHSVWV'],
['928.fna', 'HERGGAND'],
['520.fna', 'VLKTDTTG'],
['1290.fna', 'EAALDLHR'],
['25.fna', 'FCSILGVV'],
['284.fna', 'YHKLTFED'],
['1110.fna', 'KITSSSDF']],
dtype='|S18')
然后
h = h5py.File('data.hdf5', 'w')
dset = h.create_dataset('data', data=d)
给出:
<HDF5 dataset "init": shape (21, 2), type "|S18">
关于python - 使用 h5py 写入文件的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24437550/