本文主要介紹:matlab與C++結合的數據類型mwArray的一些基本知識,以及在C++中,如何對mwArray賦值,主要包括矩陣賦值和字符串賦值。
首先,說明mwArray數據類型不同於mxArray,所以許多關於mxArray的用法,對mwArray不一定適用,具體區別見博文:
http://www.cnblogs.com/kmliang/archive/2012/08/29/2662943.html
一.矩陣賦值
<1>mwArray 定義矩陣變量
mwArray A(rows, cols, type)
參數說明:
A : 變量名
rows:行數
col :列數
type :數t據類型
type類型有:
- typedef enum
- {
- mxUNKNOWN_CLASS = 0, //未知類型
- mxCELL_CLASS, //細胞類型
- mxSTRUCT_CLASS, //結構類型
- mxLOGICAL_CLASS, //布爾類型
- mxCHAR_CLASS, //字符串類型
- mxVOID_CLASS, //void類型
- mxDOUBLE_CLASS,
- mxSINGLE_CLASS, //單精度浮點數
- mxINT8_CLASS, //
- mxUINT8_CLASS,
- mxINT16_CLASS,
- mxUINT16_CLASS,
- mxINT32_CLASS,
- mxUINT32_CLASS,
- mxINT64_CLASS,
- mxUINT64_CLASS,
- mxFUNCTION_CLASS, //函數類型
- mxOPAQUE_CLASS, //
- mxOBJECT_CLASS //對象類型
- }
typedef enum
{
mxUNKNOWN_CLASS = 0, //未知類型
mxCELL_CLASS, //細胞類型
mxSTRUCT_CLASS, //結構類型
mxLOGICAL_CLASS, //布爾類型
mxCHAR_CLASS, //字符串類型
mxVOID_CLASS, //void類型
mxDOUBLE_CLASS,
mxSINGLE_CLASS, //單精度浮點數
mxINT8_CLASS, //
mxUINT8_CLASS,
mxINT16_CLASS,
mxUINT16_CLASS,
mxINT32_CLASS,
mxUINT32_CLASS,
mxINT64_CLASS,
mxUINT64_CLASS,
mxFUNCTION_CLASS, //函數類型
mxOPAQUE_CLASS, //
mxOBJECT_CLASS //對象類型
}
整體含義是:定義矩陣A,行數爲:rows,列數爲:cols,類型爲:type
注: 如果參數不是矩陣,只是一個數,令 rows=1,cols=1即可。
<2>矩陣賦初值:
- int a[6] = {1,2,3,4,5,6}
- mwArray A(2,3,mxINT32_CLASS);
- A.SetData(a,6); //第二個參數爲要設置的數的個數,大小可設爲rows*cols
int a[6] = {1,2,3,4,5,6}
mwArray A(2,3,mxINT32_CLASS);
A.SetData(a,6); //第二個參數爲要設置的數的個數,大小可設爲rows*cols
注:該過程相當於把1*6的矩陣,轉化爲2*3的矩陣,matlab轉化順序是,先排第一列,由上到下爲a[0] a[1],然後排第二列,由上到下爲a[2] a[3],即轉化後的A爲:
1 3 5
2 4 6
如果要使A爲:
1 2 3
4 5 6
需這樣賦值:
- <pre name="code" class="cpp">int a[6] = {1,2,3,4,5,6}
- mwArray A(3,2,mxINT32_CLASS); //修改此處:行列數互換
- A.SetData(a,6); //第二個參數爲要設置的數的個數,大小可設爲rows*cols
<pre name="code" class="cpp">int a[6] = {1,2,3,4,5,6}
mwArray A(3,2,mxINT32_CLASS); //修改此處:行列數互換
A.SetData(a,6); //第二個參數爲要設置的數的個數,大小可設爲rows*cols
此時生成的A爲:
1 4
2 5
3 6
該矩陣轉置之後,既可以達到所需形式,轉置過程可以在matlab的.m文件中添加,先修改.m,然後在生成dll、lib、h文件。
尤其是,在圖像處理時,如果傳遞的矩陣爲圖像數據矩陣,要採用後一種方法賦值,否則,圖像會嚴重變形失真。二、字符串賦值
char str[5] = "abcd";
//或 CString str = "abcd"
mwArray mwA(str);
該過程比較簡單。