C++ .mat 文件处理库 TinyMAT

.mat 文件是 matlab 保存数据的一种文件格式,我自己的c++项目中需要生成 .mat 格式文件给matlab做处理,网上找到的方式有:

  • 调用matlab的动态链接库,这个方法需要安装matlab
  • matio库。matio 是用c写的支持mat文件读写的库,不依赖matlab,不过api使用起来太c风格,不够友好。有人用C++做了二次封装,如matio-cpp
  • TinyMAT。轻量级的mat文件操作库,前面两个我都试了下,体验不如这个库友好。

TinyMAT怎么用

  • 下载源码编译。这是cmake的一套,就不介绍了。
  • 链接lib,需要两个头文件tinymatwriter_export.htinymatwriter.h

QT下的测试代码:

#include "tinymatwriter.h"

bool MatFileIO::writeAndSave(QString name, std::vector<std::vector<double> > &datas)
{
    if(datas.size() == 0) return true;
    int m = datas.size(), n = datas[0].size();
    double *pdatas = new double[m * n];
    for(int i = 0; i < m; ++i){
        for(int j = 0; j < n; ++j){
            pdatas[i * n + j] = datas[i][j];
        }
    }
    bool flag = false;
    //中文支持
    QByteArray array = m_filePath.toLocal8Bit();
    TinyMATWriterFile* mat = TinyMATWriter_open(array.data(), 0, m * n * sizeof(double));
    if(mat){
        flag = true;
        TinyMATWriter_writeMatrix2D_rowmajor(mat, name.toStdString().c_str(), pdatas, n, m);
        TinyMATWriter_close(mat);//会自动释放mat
    }

    delete[] pdatas;
    return flag;
}
posted @ 2021-05-12 13:54  miyanyan  阅读(672)  评论(0编辑  收藏  举报