本文主要介绍: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);
-
char str[ 5] = "abcd";
-
//或 CString str = "abcd"
-
mwArray mwA(str);
该过程比较简单。