您的位置:首页 > 编程语言 > MATLAB

Matlab代码转C++(二) —— mwArray

2017-04-14 09:54 204 查看
本文主要介绍: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类型有:

[cpp]
view plain
copy

print?

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>矩阵赋初值:

[cpp]
view plain
copy

print?

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

需这样赋值:

[cpp]
view plain
copy

print?

<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文件。

尤其是,在图像处理时,如果传递的矩阵为图像数据矩阵,要采用后一种方法赋值,否则,图像会严重变形失真。二、字符串赋值

[cpp]
view plain
copy

print?

char str[5] = "abcd"; //或 CString str = "abcd" mwArray mwA(str);



char str[5] = "abcd";
//或 CString str = "abcd"
mwArray mwA(str);


该过程比较简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: