本篇记述c/c++中读取mat文件示例
测试数据matioTest.zip下载地址:
http://pan.baidu.com/s/1sjPkMsd
1. 读取matioTest.zip中s.mat文件,数据为普通matrix
1 #include <iostream> 2 #include <cassert> 3 #include <matio.h> 4 5 6 int main() 7 { 8 mat_t *matfp; 9 const char* matFilePath = "testRes\\s.mat"; 10 matfp = Mat_Open(matFilePath, MAT_ACC_RDONLY); 11 if (NULL == matfp) { 12 fprintf(stderr, "Error opening MAT file %s\n", matFilePath); 13 return EXIT_FAILURE; 14 } 15 matvar_t* matVar = NULL; 16 // read data 'x' 17 matVar = Mat_VarRead(matfp, "x"); 18 if (matVar) { 19 assert(matVar->data_type == MAT_T_DOUBLE); 20 size_t xSize = matVar->nbytes / matVar->data_size; 21 const double* xData = static_cast<const double*>(matVar->data); 22 for (int i = 0; i < xSize; ++i) { 23 std::cout << xData[i] << " "; 24 } 25 std::cout << std::endl; 26 for (int i = 0; i < matVar->rank; ++i) { 27 std::cout << matVar->dims[i] << " "; 28 } 29 std::cout << std::endl; 30 } 31 // read data 'y' 32 matVar = Mat_VarRead(matfp, "y"); 33 if (matVar) { 34 assert(matVar->data_type == MAT_T_DOUBLE); 35 size_t ySize = matVar->nbytes / matVar->data_size; 36 const double* yData = static_cast<const double*>(matVar->data); 37 for (int i = 0; i < ySize; ++i) { 38 std::cout << yData[i] << " "; 39 } 40 std::cout << std::endl; 41 for (int i = 0; i < matVar->rank; ++i) { 42 std::cout << matVar->dims[i] << " "; 43 } 44 std::cout << std::endl; 45 } 46 // read 'minX' and 'step' is similar 47 Mat_VarFree(matVar); 48 Mat_Close(matfp); 49 system("pause"); 50 return EXIT_SUCCESS; 51 }