我正在使用matio库将std::vector<std::vector<std::vector<double>>>
的内容和其他一些数据写入MatLab文件。我在这里使用了一个教程:http://na-wiki.csc.kth.se/mediawiki/index.php/MatIO
但是,Mat_Open
保留为NULL
,这意味着我无法向该文件写入任何内容。没有错误消息,链接/编译很好,永远不会打印Saving mat file
,程序的退出代码是0
。我是否缺少明显的东西?
应该创建MatLab文件的函数的内容:
mat_t *mat;
matvar_t *matvar;
unsigned long dims[3] = {100, 100, 3};
unsigned long single_dim[1] = {1};
unsigned long size = 100;
double number = 3.14;
mat = Mat_Open("/home/ruben/data.mat", MAT_ACC_RDWR);
if(mat != NULL) {
std::cout << "Saving mat file" << std::endl;
matvar = Mat_VarCreate("matrix", MAT_C_DOUBLE, MAT_T_DOUBLE, 3, dims, matrix, 0);
Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
Mat_VarFree(matvar);
matvar = Mat_VarCreate("number", MAT_C_DOUBLE, MAT_T_DOUBLE, 1, single_dim, &number, 0);
Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
Mat_VarFree(matvar);
Mat_Close(mat);
}
我使用
#include <matio.h>
包含该库,并将其与-std=c++11 -L/usr/lib -lmatio -lz
链接。任何帮助表示赞赏。编辑:我在GitHub上找到了该项目,将其作为问题提交:https://github.com/tbeu/matio/issues/45
最佳答案
在项目作者的帮助下,我自己找到了解决方案。
有两件事出了问题:
Mat_Create
或Mat_CreateVer
。 std::vector
元素不能简单地用作Mat_VarCreate
函数的参数。相反,应该传递指向第一个元素的指针。 更新的工作代码:
mat_t *mat;
matvar_t *matvar;
unsigned long dims[3] = {100, 100, 3};
unsigned long single_dim[1] = {1};
unsigned long size = 100;
double number = 3.14;
mat = Mat_Create("/home/ruben/data.mat", NULL);
if(mat != NULL) {
std::cout << "Saving mat file" << std::endl;
matvar = Mat_VarCreate("matrix", MAT_C_DOUBLE, MAT_T_DOUBLE, 3, dims, &matrix->at(0), 0);
Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
Mat_VarFree(matvar);
matvar = Mat_VarCreate("number", MAT_C_DOUBLE, MAT_T_DOUBLE, 1, single_dim, &number, 0);
Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
Mat_VarFree(matvar);
Mat_Close(mat);
}
希望这对某人有用。