Armadillo:在一个hdf5文件中保存多个数据集
Armadillo: Save multiple datasets in one hdf5 file
我正试图使用armadillo的新功能将多个数据集保存到一个hdf5文件中,为数据集提供自定义名称(使用armadillio版本8.100.1)。但是,只有最后保存的数据集才会出现在文件中。有没有办法用armadillo附加到现有的hdf5文件中,而不是替换它?
这是我的示例代码:
#define ARMA_USE_HDF5
#include <armadillo>
int main(){
arma::mat A(2,2, arma::fill::randu);
arma::mat B(3,3, arma::fill::eye);
A.save(arma::hdf5_name("multi-hdf5.mat", "dataset1"), arma::hdf5_binary);
B.save(arma::hdf5_name("multi-hdf5.mat", "dataset2"), arma::hdf5_binary);
return 0;
}
使用h5dump
实用程序读取hdf5文件。
不幸的是,我认为你做不到。我是一个HDF5开发人员,不是一个armadillo开发人员,但我为您看了一眼他们的源代码。
保存函数看起来像是将单个矩阵转储到单个文件中。在函数save_hdf5_binary()(一个版本为diskio_meat.hpp:1255)中,他们使用H5F_ACC_TRUNC标志调用H5Fcreate(),这将阻塞任何现有文件。没有"如果文件存在则打开"或clobber/nonclobber选项。唯一的H5Fopen()调用在hdf5_binary_load()函数中,这些调用不会保持文件打开以备以后写入。
这种破坏就是在您的情况下发生的情况,顺便说一句,A.save()创建了一个包含数据集1的文件,然后B.save()用包含数据集2的新文件破坏该文件。
此外,就其价值而言,"附加到HDF5文件"并不是真正正确的思考方式。HDF5文件不像文本文件那样是字节/字符流。附加到数据集,是的。文件,不是。把它想象成一个关系数据库:你可能会把数据附加到一个表中,但你可能不会说你把数据附加在数据库中。
最新版本的Armadillo已经涵盖了这种可能性。您必须在保存方法中使用hdf5_opts::append
,因此如果要保存矩阵a,然后你可以写A.save(hdf5_name(filename, dataset, hdf5_opts::append) )
。
- 无法通过头文件保存变量的值
- 是否有标准的文件保存和交换模式
- C++两次从文件保存对象读取多重继承
- 如何选择文件保存到的位置?
- 如何将文本文件保存到C 中的字符串结构
- 将文件保存到目录C
- 如何在不保存文件的情况下制作打印屏幕并将其发送到FTP服务器?我的工作代码将文件保存到HDD
- 从文件C++保存和读取双向量
- 使用 depend将对象文件保存在相同的生成文件目录中
- 在C++中创建文件时,创建的文件保存在何处
- 在 cab 应用程序卸载时将文件保存在文件夹中
- 读取.txt文件保存在内存中
- 如何将CSV文件保存为UTF-8
- 使用iostream将文件保存在路径
- 在Qt中将文件保存到网络
- 将链表写入 txt 文件(保存过程)
- 在 C++ 中将编辑过的内文件保存到输出文件时出现问题
- 将文件保存在不同的linux位置
- 多线程文件保存操作
- 文件保存期间的进度