欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

我的計算機環(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)計算機: 
MachineX64(/MACHINE:X64) 

6.計算機環(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 ); 

返回時需要使用強制類型轉(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)文章

  • C++中字符串查找操作的兩則實例分享

    C++中字符串查找操作的兩則實例分享

    這篇文章主要介紹了C++中字符串的查找操作的兩則實例分享,分別是找到第一個只出現(xiàn)一次的字符以及找出連續(xù)最長的數(shù)字串的方法,需要的朋友可以參考下
    2016-02-02
  • c/c++拷貝構(gòu)造函數(shù)和關(guān)鍵字explicit詳解

    c/c++拷貝構(gòu)造函數(shù)和關(guān)鍵字explicit詳解

    這篇文章主要介紹了c/c++拷貝構(gòu)造函數(shù)和關(guān)鍵字explicit的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • C語言中“不受限制”的字符串函數(shù)總結(jié)

    C語言中“不受限制”的字符串函數(shù)總結(jié)

    這篇文章主要給大家總結(jié)介紹了C語言中一些“不受限制”的字符串函數(shù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言中網(wǎng)絡(luò)地址與二進制數(shù)之間轉(zhuǎn)換的函數(shù)小結(jié)

    C語言中網(wǎng)絡(luò)地址與二進制數(shù)之間轉(zhuǎn)換的函數(shù)小結(jié)

    這篇文章主要介紹了C語言中網(wǎng)絡(luò)地址與二進制數(shù)之間轉(zhuǎn)換的函數(shù)小結(jié),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++vector自定義大小方式

    C++vector自定義大小方式

    這篇文章主要介紹了C++vector自定義大小方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • QT實現(xiàn)用戶登錄注冊

    QT實現(xiàn)用戶登錄注冊

    這篇文章主要為大家詳細介紹了QT實現(xiàn)用戶登錄注冊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 關(guān)于C++的重載運算符和重載函數(shù)

    關(guān)于C++的重載運算符和重載函數(shù)

    一般來說,重載運算符在實際的項目開發(fā)中會經(jīng)常的用到,但如果某些自定義類型通過簡短幾行代碼重載一些常用的運算符(如:+-*/),就能讓編程工作帶來方便,需要的朋友可以參考下本文
    2023-05-05
  • C++枚舉類型用法總結(jié)(枚舉字符常量代替常量)

    C++枚舉類型用法總結(jié)(枚舉字符常量代替常量)

    這篇文章主要介紹了C++枚舉類型用法總結(jié)(枚舉字符常量代替常量),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 詳解C語言中printf輸出的相關(guān)函數(shù)

    詳解C語言中printf輸出的相關(guān)函數(shù)

    這篇文章主要介紹了C語言中printf輸出的相關(guān)函數(shù)總結(jié),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • 詳解VS2010實現(xiàn)創(chuàng)建并生成動態(tài)鏈接庫dll的方法

    詳解VS2010實現(xiàn)創(chuàng)建并生成動態(tài)鏈接庫dll的方法

    在某些應(yīng)用程序場景下,需要將一些類或者方法編譯成動態(tài)鏈接庫dll,以便別的.exe或者.dll文件可以通過第三方庫的方式進行調(diào)用,下面就簡單介紹一下如何通過VS2010來創(chuàng)建動態(tài)鏈接庫
    2022-12-12

最新評論