具有H5py到现有数据集的列堆栈和行堆栈

时间:2013-07-04 13:43:42

标签: python numpy h5py

我正在尝试使用Python将列堆栈和行堆栈数据放在HDF5文件中,并附加其他数据。我正在录制来自相机的图像并将其保存到单个文件中。然后我希望能够生成一个文件,其中所有图像都拼凑在一起。因此,我希望能够在一个新文件中创建一个数据集,并将每个图像文件中的所有数组堆叠到一个文件中。

我知道h5py允许我使用像numPy数组这样的数据集,但我不知道如何告诉h5py再次将数据保存到文件中。下面我有一个非常简单的例子。

我的问题是如何将HDF5文件中的数据与第二个数组(arr2)进行列堆叠,以便将arr2保存到文件中?

(注意:在我的实际应用程序中,文件中的数据将比示例中的数据大得多。因此,将数据导入内存,列堆叠,然后将其重写到文件是不可能的。 )

import h5py
import numpy

arr1 = numpy.random.random((2000,2000))

with h5py.File("Plot0.h5", "w") as f:
    dset = f.create_dataset("Plot", data = arr1)

arr2 = numpy.random.random((2000,2000))

with h5py.File("Plot0.h5", "r+") as f:
    dset = f["Plot"]
    dset = numpy.column_stack((dset, arr2))

这似乎是一个微不足道的问题,但我的所有搜索都没有成功。提前谢谢。

1 个答案:

答案 0 :(得分:1)

重读了H5py上的一些文档后,我意识到自己的错误。这是我的新脚本结构,允许我在HDF5文件中堆栈数组:

import h5py
import numpy

arr1 = numpy.random.random((2000,2000))

with h5py.File("Plot0.h5", "w") as f:
    dset = f.create_dataset("Plot", data = arr1, maxshape=(None,None))

dsetX, dsetY = 2000,2000
go = ""
while go == "":
    go = raw_input("Current Size: " + str(dsetX) + "  " + str(dsetY) + "  Continue?")
    arr2 = numpy.random.random((2000,2000))

    with h5py.File("Plot0.h5", "r+") as f:
        dset = f["Plot"]
        print len(arr2[:])
        print len(arr2[0][:])
        change = "column"

        dsetX, dsetY = dset.shape

        if change == "column":

            x1 = dsetX
            x2 = len(arr2[:]) + dsetX

            y1 = 0
            y2 = len(arr2[0][:])

            dset.shape = (x2, y2)
        else:
            x1 = 0
            x2 = len(arr2[:])

            y1 = dsetY
            y2 = len(arr2[0][:]) + dsetY

            dset.shape = (x2, y2)
        print "x1", x1
        print "x2", x2
        print "y1", y1
        print "y2", y2

        print dset.shape

        dset[x1:x2,y1:y2] = arr2

        print arr2
        print "\n"
        print dset[x1:x2,y1:y2]

        dsetX, dsetY = dset.shape

我希望这可以帮助别人。当然,欢迎更好地解决这个问题。