【发布时间】:2017-09-17 22:29:24
【问题描述】:
我目前正在进行一项实验,我在空间上扫描目标并在每个离散像素处获取示波器轨迹。通常我的走线长度是 200Kpts。在扫描了整个目标之后,我在空间上组合了这些时域信号,并且基本上播放了一段被扫描的内容。我的扫描区域大小为 330x220 像素,因此整个数据集比我必须使用的计算机上的 RAM 大。
首先,我只是将每个示波器轨迹保存为一个 numpy 数组,然后在我的扫描完成下采样/过滤等之后,然后以一种不会遇到内存问题的方式将电影拼凑在一起。但是,我现在无法下采样,因为会发生混叠,因此需要访问原始数据。
我已经开始研究使用 H5py 将我的大型 3d 数据块存储在 HDF5 数据集中。我的主要问题是我的块大小分配。我的传入数据与我想读取它的平面正交。我写入数据的主要选项(据我所知)是:
#Fast write Slow read
with h5py.File("test_h5py.hdf5","a") as f:
dset = f.create_dataset("uncompchunk",(height,width,dataLen),chunks = (1,1,dataLen), dtype = 'f')
for i in range(height):
for j in range(width):
dset[i,j,:] = np.random.random(200000)
或
#Slow write Fast read
with h5py.File("test_h5py.hdf5","a") as f:
dset = f.create_dataset("uncompchunk",(height,width,dataLen),chunks = (height,width,1), dtype = 'f')
for i in range(height):
for j in range(width):
dset[i,j,:] = np.random.random(200000)
有没有什么方法可以优化这两种情况,使它们的运行效率都非常低?
【问题讨论】:
-
如果您事先知道数据集的大小,并且不想使用压缩,则可以使用连续存储(即无块)。你不能试试吗?
标签: python h5py large-data