C 讀寫 mat檔案

2021-06-18 03:27:04 字數 2817 閱讀 5679

from:

最近在編寫

c++程式的過程中,需要使用matlab生成的.mat檔案,於是查詢了基本使用方法。  

我的計算機環境是win7 64位系統,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++->常規->附加包含目錄 新增:  

matlab\r2010b\extern\include  

matlab\r2010b\extern\include\win64  

3.鏈結器->輸入->附加依賴庫 新增:  

libmat.lib  

libmx.lib  

libmex.lib  

libeng.lib  

由於所安裝的matlab為64位,要呼叫其函式,需要將工程轉換為x64  

4.頂選單->生成->配置管理器->平台:x64  

5.鏈結器->高階->目標計算機:  

machinex64(/machine:x64)  

6.計算機環境變數->path 新增:  

e:\devtools\matlab\r2010b\extern\lib\win64\microsoft;  

e:\devtools\matlab\r2010b\bin\win64;  

二、所用到的基本讀取寫入mat檔案**示例:  

首先需要包含標頭檔案:  

#include 

[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);    

matrixa(m,n);    

for (int i=0; i

for (int j=0; j

a[i][j] = inita[m*j+i];    

matclose(pmatfile);    

mxfree(inita);    

// 生成.mat檔案    

double *outa = new double[m*n];    

for (int i=0; i

for (int j=0; j

outa[m*j+i] = a[i][j];    

pmatfile = matopen("a.mat","w");    

mxsetdata(pmxarray, outa);    

matputvariable(pmatfile, "a", pmxarray);    

matclose(pmatfile);    

三、程式說明  

1.使用matopen函式開啟mat檔案  

matfile *matopen(const char *filename,const char *mode)  

mode:  

r:以唯讀方式開啟  

u:更新模式,可讀可寫,但是如果要開啟的資料檔案不存在,也不會建立新的檔案  

w:以寫入方式開啟,只能寫如入,如果要開啟的資料檔案不存在,則建立乙個新的檔案  

2.使用matgetvariable函式讀取mat檔案中的變數  

mxarray * matgetvariable(matfile * pmf, const char * name);  

讀取名為name的變數,返回乙個資料陣列指標  

3.使用mxgetdata函式獲取資料陣列中的資料  

void *mxgetdata(const mxarray *pa );  

返回時需要使用強制型別轉換。  

4.使用mxgetm和mxgetn函式獲取資料陣列矩陣的維數  

size_t mxgetm(const mxarray *pa);  

size_t mxgetn(const mxarray *pa);  

5.使用mxsetdata函式將變數存入資料陣列  

void mxsetdata( mxarray *pa, void  *newdata );  

6.使用matputvariable函式將資料陣列存入到mat檔案中  

int matputvariable(matfile * pmf, const char * name, const mxarray * pa);  

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

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

8.完成mat檔案操作後需要呼叫matclose函式關閉檔案,並使用mxfree釋放記憶體 

C 讀寫 mat檔案

最近在編寫c 程式的過程中,需要使用matlab生成的.mat檔案,於是查詢了基本使用方法。我的計算機環境是win7 64位系統,vs2010,matlab r2010b。一 工程配置 1.c c 常規 附加包含目錄 新增 matlab r2010b extern include matlab r2...

C 讀寫 mat檔案

最近在編寫c 程式的過程中,需要使用matlab生成的.mat檔案,於是查詢了基本使用方法。我的計算機環境是win7 64位系統,vs2010,matlab r2010b。一 工程配置 1.c c 常規 附加包含目錄 新增 matlab r2010b extern include matlab r2...

C 讀寫 mat檔案

原作 最近在編寫c 程式的過程中,需要使用matlab生成的.mat檔案,於是查詢了基本使用方法。我的計算機環境是win7 64位系統,vs2010,matlab r2010b。一 工程配置 1.c c 常規 附加包含目錄 新增 matlab r2010b extern include matlab...