我目前有一个包含一百万行的数据集,每行约10000列(可变长度) .
现在我想将这些数据写入HDF5文件,以便稍后使用 . 我让这个工作,但它是 incredibly slow . 即使1000个值也需要几分钟才能存储在HDF5文件中 .
我一直在寻找各地,包括SO和H5Py文档,但我真的找不到任何描述我的用例的东西,但我知道它可以完成 .
下面我制作了一个演示源代码,描述了我现在正在做的事情:
import h5py
import numpy as np
# I am using just random values here
# I know I can use h5py broadcasts and I have seen it being used before.
# But the issue I have is that I need to save around a million rows with each 10000 values
# so I can't keep the entire array in memory.
random_ints = np.random.random(size = (5000,10000))
# See http://stackoverflow.com/a/36902906/3991199 for "libver='latest'"
with h5py.File('my.data.hdf5', "w", libver='latest') as f:
X = f.create_dataset("X", (5000,10000))
for i1 in range(0, 5000):
for i2 in range(0, 10000):
X[i1,i2] = random_ints[i1,i2]
if i1 != 0 and i1 % 1000 == 0:
print "Done %d values..." % i1
这些数据来自数据库,它不是预生成的np数组,如源代码所示 .
如果您运行此代码,您可以看到它打印出“完成1000个值”需要很长时间 .
我的笔记本电脑配备8GB内存,Ubuntu 16.04 LTS和Intel Core M(与Core i5类似)和SSD,必须足够快,比这更快 .
我在这里读过有关广播的内容:http://docs.h5py.org/en/latest/high/dataset.html
当我像这样使用它时:
for i1 in range(0, 5000):
X[i1,:] = random_ints[i1]
它已经变得更快(完成几秒) . 但我不知道如何使用可变长度数据集(列是可变长度) . 如何获得一些关于如何完成这项工作的见解会很高兴,因为我认为我现在对HDF5的概念并不是很了解:)非常感谢!
1 回答
关注http://docs.h5py.org/en/latest/special.html
并使用打开的h5文件
f
,我试过:逐个设置元素:
或者制作一个对象数组:
最后一次写的一部分:
我可以用以下方法查看元素的部分:
但我不能把它当作二维数组:
vset[3,:10]
. 这是一个数组数组 .