使用MatLab提供最新的、实部虚部同时读入的方法:mxGetComplexDoubles
#include <mat.h>
#include <iostream>
#include <stdio.h>
#include <string.h>
int main(){
MATFile* pMatFile = NULL;
mxArray* pMxArray = NULL;
std::string matpath = "xxx.mat";
double* matdata;
pMatFile = matOpen(matpath.c_str(), "r");
if (!pMatFile) {
return -1;
}
std::string matVariable = "varName";
pMxArray = matGetVariable(pMatFile, matVariable.c_str());
if (!pMxArray) {
return -2;
}
mxComplexDouble* pc= mxGetComplexDoubles(pMxArray);
int M = mxGetM(pMxArray); // 行数
int N = mxGetN(pMxArray); // 列数
std::cout << pc[2].imag << std::endl;
std::cout << M << " " << N << std::endl;
return 0;
}
上述代码实现读取xxx.mat
文件里varName
变量(复数矩阵)并输出第三个元素的虚部。
注意matlab里数据存储的顺序,是按列存储。若矩阵是10*10,则mxComplexDouble* pc
的第三个元素就对应矩阵的第三行第一列的元素。
C++配置mat读写的环境可以参考另一位博主的文章:C++读写Mat文件