我需要从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
并自己跟踪文件指针似乎是一个可行的方法。是的,这很困难,但不会给内存带来压力,而且速度相当快。 - Najzerofwrite
函数并将数据以简单的二进制格式存储,这样C++就可以轻松读取(甚至是内存映射),比较容易实现。 - Ben Voigt