亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

一、工程配置: 
1.VC++目錄->包含目錄 添加: 
MATLAB\R2010b\extern\include 
MATLAB\R2010b\extern\include\win64 
 ->庫(kù)目錄 添加: 
  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.鏈接器->輸入->附加依賴庫(kù) 添加: 
libmat.lib 
libmx.lib 
libmex.lib 
libeng.lib 

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

6.計(jì)算機(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ù)文件不存在,也不會(huì)創(chuàng)建新的文件 
w:以寫入方式打開,只能寫如入,如果要打開的數(shù)據(jù)文件不存在,則創(chuàng)建一個(gè)新的文件 


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

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

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


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

void *mxGetData(const mxArray *pa ); 

返回時(shí)需要使用強(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,存入出錯(cuò)返回非0 


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

相關(guān)文章

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

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

    這篇文章主要介紹了C++中字符串的查找操作的兩則實(shí)例分享,分別是找到第一個(gè)只出現(xiàn)一次的字符以及找出連續(xù)最長(zhǎng)的數(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)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • C語言中“不受限制”的字符串函數(shù)總結(jié)

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

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

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

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

    C++vector自定義大小方式

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

    QT實(shí)現(xiàn)用戶登錄注冊(cè)

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

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

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

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

    這篇文章主要介紹了C++枚舉類型用法總結(jié)(枚舉字符常量代替常量),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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ǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • 詳解VS2010實(shí)現(xiàn)創(chuàng)建并生成動(dòng)態(tài)鏈接庫(kù)dll的方法

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

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

最新評(píng)論