我正在尝试使用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))
这似乎是一个微不足道的问题,但我的所有搜索都没有成功。提前谢谢。
答案 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
我希望这可以帮助别人。当然,欢迎更好地解决这个问题。