原作:
最近在編寫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...