【发布时间】:2014-08-17 17:18:33
【问题描述】:
首先,我阅读了主题“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
谢谢
【问题讨论】:
-
从你是 quoting 的帖子中,“读取 [..] 以尽可能大的块”并写入 un 块。
-
嗨,托尼。感谢您指出。你能给我举个例子吗?
-
你能从文件 8.txt 中放几行数据吗?
-
哦,@user3780518,刚刚看到你的评论。抱歉误读。 h5py 数据集是数组而不是哈希表。您可能希望在此处编写自己的哈希函数,该函数可以将这些
str映射到int,以便您可以索引到数据集。 -
h.attrs将是一个字典,但不建议使用attrs作为数据集。 hdf5 中的数据集本质上可以被认为是 numpy 数组,我认为当前的方法存在一个根本问题。它适用于您的测试并不意味着它一定会起作用。