mxArray資料型別
1 、資料型別mxArray的操作
在上節的Matlab引擎函式中,所有與變數有關的資料型別都是mxArray型別。資料結構mxArray以及大量的mx開頭的函式,廣泛用於Matlab 引擎程式和Matlab C數學庫中。mxArray是一種很複雜的資料結構,與Matlab中的array相對應,我們只需熟悉Matlab的array型別和幾個常用的mxArray函式即可。
在VC中,所有和Matlab的資料互動都是通過mxArray來實現的,在使用mxArray型別的程式中,應包含標頭檔案matrix.h,不過在引擎程式中,一般會包含標頭檔案engine.h,該檔案裡面已經包含了matrix.h,因此無需重複包含。
4.1 建立和清除mxArray型資料
Matlab有很多種變數型別,對應於每種型別,基本上都有一個函式用於建立,但它們都有相同的資料結構,就是mxArray。
陣列的建立採用mxCreatexxx形式的函式,例如新建一個double型別陣列,可用函式mxCreateDoubleMatrix,函式形式如下:
mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag);
引數m和n為矩陣的行數和列數。ComplexFlag為常數,用來區分矩陣中元素是實數還是複數,取值分別為mxREAL和mxCOMPLEX。例如,建立一個3行5列的二維實數陣列,可用如下語句:
mxArray *T = mxCreateDoubleMatrix(3, 5, mxREAL);
注意:mxArray的儲存是先列後行的,而C/C++中是先行後列的。
對應的,要刪除一個陣列mxDestroyArray,該函式宣告如下:
void mxDestroyArray(mxArray *array_ptr);
引數array_ptr為要刪除的陣列指標。
例如,要刪除上面建立的陣列T,可用如下語句:
mxDestroyArray(T);
類似的建立函式還有:
mxArray *mxCreateString(const char *str);
建立一個字串型別並初始化為str字串。
一般的在VC與Matlab互動中,以上兩種型別就夠了,其它型別陣列的建立這裡不再介紹。
2 、管理mxArray資料型別
2.1 管理mxArray資料大小
要獲得mxArray陣列每一維上元素的個數,可以用mxGetM和mxGetN函式。其中mxGetM用來獲得陣列第一維的元素個數,對於矩陣來說就是行數。
int mxGetM(const mxArray *array_ptr); //返回array_ptr對應陣列第一維的元素個數(行數)
int mxGetN(const mxArray *array_ptr); //返回array_ptr對應陣列其它維的元素個數,對於矩陣來說是列數。
對於多維陣列來說是從第2維到最後一維的各維元素個數的乘積。
要獲得某一特定維的元素個數,則要用函式:
const int *mxGetDimensions(const mxArray *array_ptr);
該函式返回array_ptr各維的元素個數儲存在一個int陣列中返回。對於常用的矩陣來說,用mxGetM和mxGetN兩個函式就可以了。
另外還可以通過mxGetNumberOfDimensions來獲得陣列的總的維數,用mxSetM、mxSetN設定矩陣的行數和列數,函式說明如下:
int mxGetNumberOfDimensions(const mxArray *array_ptr); //返回陣列的維數
void mxSetM(mxArray *array_ptr, int m); //設定陣列為m行
void mxSetN(mxArray *array_ptr, int n); //設定陣列為n列
2.2 判斷mxArray陣列型別
在對mxArray型別的變數進行操作之前,可以驗證以下其中的陣列的資料型別,比如是否為double陣列、整數、字串、邏輯值等,以及是否為某種結構、類、或者是特殊型別,比如是否為空陣列,是否為inf、NaN等。常見的判斷函式有:
bool mxIsDouble(const mxArray *array_ptr);
bool mxIsComplex(const mxArray *array_ptr);
bool mxIsChar(const mxArray *array_ptr);
bool mxIsEmpty(const mxArray *array_ptr);
bool mxIsInf(double value);
…… ……
這些函式比較簡單,意義自明,不再解釋。
2.3 管理mxArray陣列的資料
對於常用的double型別的陣列,可以用mxGetPr和mxGetPi兩個函式分別獲得其實部和虛部的資料指標,這兩個函式的宣告如下:
double *mxGetPr(const mxArray *array_ptr); //返回陣列array_ptr的實部指標
double *mxGetPi(const mxArray *array_ptr); //返回陣列array_ptr的虛部指標
這樣,就可以通過獲得的指標對mxArray型別的陣列中的資料進行讀寫操作。例如可以用函式engGetVariable從Matlab工作空間讀入mxArray型別的陣列,然後用mxGetPr和mxGetPi獲得資料指標,對並其中的資料進行處理,最後呼叫engPutVariable函式將修改後的陣列重新寫入到Matlab工作空間。
相關文章
- js資料型別之基本資料型別和引用資料型別JS資料型別
- 資料型別: 資料型別有哪些?資料型別
- 區別值型別資料和引用型別資料型別
- 資料型別,型別轉換資料型別
- 資料型別資料型別
- JAVA中基本資料型別和引用資料型別Java資料型別
- 3. php資料型別、資料型別轉換PHP資料型別
- 基本資料型別與字串型別資料型別字串
- MySQL基礎之----資料型別篇(常用資料型別)MySql資料型別
- Java中的基本資料型別與引用資料型別Java資料型別
- JavaScript - 資料型別JavaScript資料型別
- Symbol資料型別Symbol資料型別
- 資料型別2資料型別
- JavaScript 資料型別JavaScript資料型別
- js資料型別JS資料型別
- TypeScript資料型別TypeScript資料型別
- Oracle 資料型別Oracle資料型別
- SQL 資料型別SQL資料型別
- NumPy 資料型別資料型別
- php資料型別PHP資料型別
- numpy資料型別資料型別
- JavaScript資料型別JavaScript資料型別
- 一、資料型別資料型別
- [Mysql]資料型別MySql資料型別
- MySQL資料型別MySql資料型別
- go 資料型別Go資料型別
- 基本資料型別資料型別
- Python資料型別Python資料型別
- Java資料型別Java資料型別
- MYSQL 資料型別MySQL 資料型別
- Sqlite—資料型別SQLite資料型別
- Redis資料型別Redis資料型別
- 1.2 資料型別資料型別
- go資料型別識別Go資料型別
- Oracle資料型別對應Java型別Oracle資料型別Java
- Mysql 資料型別之整數型別MySQL 資料型別
- Java資料型別及型別轉換Java資料型別
- PHP 資料型別之檢視和判斷資料型別PHP資料型別
- 資料型別是什麼?Python的資料型別又有哪些?資料型別Python