C++ -- mwArray用法

在vc中调用MATLAB产生的组建时,需要将vc中的参数转换成mwArray格式。

对mwArray赋值,主要包括矩阵赋值和字符串赋值。

一.矩阵赋值

<1>mwArray 定义矩阵变量

            mwArray  A(rows, cols, type)

            参数说明:

  •  A  : 变量名
  • rows:行数
  • col   :列数
  • type :数t据类型

整体含义是:定义矩阵A,行数为:rows,列数为:cols,类型为: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  //对象类型  
}
复制代码

注: 如果参数不是矩阵,只是一个数,令 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

注:该过程相当于把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

需这样赋值:

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); 

该过程比较简单。

 

DEMO:

复制代码
void MainWindow::on_pushButton_clicked()
{
    mwArray aa(1,1,mxDOUBLE_CLASS,mxREAL);
    mwArray bb(1,1,mxDOUBLE_CLASS,mxREAL);
    mwArray cc(1,1,mxDOUBLE_CLASS,mxREAL);

    //参数赋值
    double a[1]={111};       //input
    double b[1]={5};          //input
    double c[1];                  //output

    aa.SetData(a,1);           //把a的值赋给aa
    bb.SetData(b,1);           //把b的值赋给bb
    testmat(1,cc,aa,bb);     //目标函数
    cc.GetData(c,1);           //获取输出值cc

    ui->label->setText(QString::number(c[0]));   //显示输出值c
}
复制代码

 

 

转载于:https://my.oschina.net/zengjs275/blog/730358

posted @   手磨咖啡  阅读(5249)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示