【发布时间】:2014-12-01 19:14:00
【问题描述】:
我必须从 c++ 中读取一些 .mat 数据文件,我通读了文档,但我想知道如何以干净优雅的方式处理数据,例如使用std:vector(.mat文件大小适中(10M~1G),但内存问题要认真对待)
我的功能是这样的:
#include <stdio.h>
#include "mat.h"
#include <vector>
int matread(const char *file, const vector<double>& pdata_v) {
MATFile *pmat;
pmat=matOpen("data.mat","r");
if (pmat == NULL) {
printf("Error opening file %s\n", file);
return(1);
}
mxArray *pdata = matGetVariable(pmat, "LocalDouble");
// pdata -> pdata_v
mxDestroy pa1; // clean up
return 0;
}
所以,问题是,我怎样才能有效且安全地从 mxArray *pdata 数组复制到向量 pdata_v?
【问题讨论】:
-
文件很大?内存可能是个问题?我们在谈论什么大小的文件?
fgets并自己跟踪文件指针似乎是一种可行的方法。是的,它很难,但不会对记忆造成压力,而且速度很快。 -
使用 MATLAB 中的
fwrite并将数据以 C++ 可以轻松读取的简单二进制格式(甚至是内存映射)要容易得多。
标签: c++ matlab stdvector mex mat-file