最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++讀寫.mat文件的方法

 更新時間:2013年03月13日 10:31:28   作者:  
本文介紹了“C++讀寫.mat文件的方法”,需要的朋友可以參考一下

最近在編寫C++程序的過程中,需要使用matlab生成的.mat文件,于是查找了基本使用方法。 

我的計算機(jī)環(huán)境是win7 64位系統(tǒng),VS2010,matlab R2010b。 

一、工程配置: 
1.VC++目錄->包含目錄 添加: 
MATLAB\R2010b\extern\include 
MATLAB\R2010b\extern\include\win64 
 ->庫目錄 添加: 
  MATLAB\R2010b\extern\lib\win64\microsoft 
  MATLAB\R2010b\extern\lib\win32\microsoft 
2.C/C++->常規(guī)->附加包含目錄 添加: 
  MATLAB\R2010b\extern\include 
  MATLAB\R2010b\extern\include\win64 
3.鏈接器->輸入->附加依賴庫 添加: 
libmat.lib 
libmx.lib 
libmex.lib 
libeng.lib 

由于所安裝的matlab為64位,要調(diào)用其函數(shù),需要將工程轉(zhuǎn)換為X64 
4.頂菜單->生成->配置管理器->平臺:X64 
5.鏈接器->高級->目標(biāo)計算機(jī): 
MachineX64(/MACHINE:X64) 

6.計算機(jī)環(huán)境變量->path 添加: 
E:\DevTools\MATLAB\R2010b\extern\lib\win64\microsoft; 
E:\DevTools\MATLAB\R2010b\bin\win64; 

二、所用到的基本讀取寫入mat文件代碼示例: 

首先需要包含頭文件: 

復(fù)制代碼 代碼如下:

#include <mat.h> 

[cpp] view plaincopy 

    MATFile *pmatFile = NULL;   
    mxArray *pMxArray = NULL;   

    // 讀取.mat文件(例:mat文件名為"initUrban.mat",其中包含"initA")   
    double *initA;   

    pmatFile = matOpen("initUrban.mat","r");   
    pMxArray = matGetVariable(pmatFile, "initA");   
    initA = (double*) mxGetData(pMxArray);   
    M = mxGetM(pMxArray);   
    N = mxGetN(pMxArray);   
    Matrix<double> A(M,N);   
    for (int i=0; i<M; i++)   
        for (int j=0; j<N; j++)   
            A[i][j] = initA[M*j+i];   

    matClose(pmatFile);   
    mxFree(initA);   

    // 生成.mat文件   
    double *outA = new double[M*N];   
        for (int i=0; i<M; i++)   
            for (int j=0; j<N; j++)   
                outA[M*j+i] = A[i][j];   
    pmatFile = matOpen("A.mat","w");   
    mxSetData(pMxArray, outA);   
    matPutVariable(pmatFile, "A", pMxArray);   
    matClose(pmatFile);   


三、程序說明 

1.使用matOpen函數(shù)打開mat文件 


MATFile *matOpen(const char *filename,const char *mode) 

mode: 
r:以只讀方式打開 
u:更新模式,可讀可寫,但是如果要打開的數(shù)據(jù)文件不存在,也不會創(chuàng)建新的文件 
w:以寫入方式打開,只能寫如入,如果要打開的數(shù)據(jù)文件不存在,則創(chuàng)建一個新的文件 


2.使用matGetVariable函數(shù)讀取mat文件中的變量 

mxArray * matGetVariable(MATFile * pMF, const char * name); 

讀取名為name的變量,返回一個數(shù)據(jù)陣列指針 


3.使用mxGetData函數(shù)獲取數(shù)據(jù)陣列中的數(shù)據(jù) 

void *mxGetData(const mxArray *pa ); 

返回時需要使用強(qiáng)制類型轉(zhuǎn)換。 


4.使用mxGetM和mxGetN函數(shù)獲取數(shù)據(jù)陣列矩陣的維數(shù) 

size_t mxGetM(const mxArray *pa); 

size_t mxGetN(const mxArray *pa); 


5.使用mxSetData函數(shù)將變量存入數(shù)據(jù)陣列 

void mxSetData( mxArray *pa, void  *newdata ); 


6.使用matPutVariable函數(shù)將數(shù)據(jù)陣列存入到mat文件中 

int matPutVariable(MATFile * pMF, const char * name, const mxArray * pA); 

存入成功返回0,存入出錯返回非0 


7.由于malab中矩陣的存儲是按列存儲,與c中不同,所以從mat文件中獲取的矩陣需要重新排列。生成mat文件時,同樣要注意。 

相關(guān)文章

最新評論

襄垣县| 齐齐哈尔市| 翁牛特旗| 道孚县| 东台市| 长乐市| 仙游县| 钟山县| 如东县| 温宿县| 鸡西市| 扎兰屯市| 河南省| 嘉峪关市| 淮北市| 鄱阳县| 慈溪市| 渭源县| 读书| 江西省| 陆良县| 威宁| 山东| 河津市| 陇南市| 营山县| 武强县| 抚顺市| 文山县| 万安县| 武安市| 腾冲县| 遂平县| 裕民县| 合江县| 溧水县| 汨罗市| 伊金霍洛旗| 六枝特区| 东阳市| 永清县|