C 讀寫 mat檔案

2021-07-04 07:23:55 字數 2892 閱讀 5132

原作:

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

我的計算機環境是win7 64位系統,vs2010,matlab r2010b。

一、工程配置:

1.c/c++->常規->附加包含目錄 新增:

matlab\r2010b\extern\include

matlab\r2010b\extern\include\win64

2.鏈結器->常規->附加庫目錄 新增:

matlab\r2010b\extern\lib\win64\microsoft

matlab\r2010b\extern\lib\win32\microsoft

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 plain

copy

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> a(m,n);  

for(

inti=0; i

for(

intj=0; j

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

matclose(pmatfile);  

mxfree(inita);  

// 生成.mat檔案

double

*outa = 

newdouble

[m*n];  

for(

inti=0; i

for(

intj=0; j

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

pmatfile = matopen("a.mat"

,"w"

);  

pmxarray = mxcreatedoublematrix(m, n, mxreal);  

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.使用mxcreatedoublematrix函式建立資料陣列為雙浮點數矩陣

mxarray *mxcreatedoublematrix(mwsize m, mwsize n, mxcomplexity flag);

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

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

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

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

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

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

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

C 讀寫 mat檔案

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

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...